2014-01-25 4 views
0

다음 예제를 만들었지 만 왜 작동하지 않는 것인지 알 수 없습니다. 내가 읽기 및 쓰기 권한이 있어야 ImageIO.write()로 jpg를 덮어 쓰지 않습니다.

  • 내 검사 중에 false를 반환하지 않습니다

    • ,
    • 예외가 발생하지 않았을 때 ImageIO에서이 이미지를 덮어 사실이 있다고 응답
    • , ...

    하지만 여전히 디스크의 이미지는 변경되지 않았습니다.

    그것은 덮어
    import java.awt.image.BufferedImage; 
    import java.io.File; 
    
    import javax.imageio.ImageIO; 
    import javax.swing.JFileChooser; 
    import javax.swing.filechooser.FileNameExtensionFilter; 
    
    public class example 
    { 
        public static void main(String[] args) 
         { 
          try 
           { 
            // load a jpg file 
            File imageFile = getFile(); 
    
            // Make a Buffered Image from it 
            BufferedImage img = ImageIO.read(imageFile); 
    
            // for every pixel in the image 
            for (int x = 0; x < img.getWidth(); x++) 
             for (int y = 0; y < img.getHeight(); y++) 
              // check if the RGB integer is an odd number 
              if (img.getRGB(x, y) % 2 != 0) 
               // make it an even number if it is odd (the OCD god demands it!) 
               img.setRGB(x, y, img.getRGB(x, y) - 1); 
    
            // Write the OCD friendly version to the file 
            System.out.println("Was overwritten: " + ImageIO.write(img, "jpg", imageFile)); 
            System.out.println(); 
    
            // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    
            // Select the same file again 
            imageFile = getFile(); 
    
            // Make the bufferedImage from it 
            img = ImageIO.read(imageFile); 
    
            // for every pixel in the image 
            for (int x = 0; x < img.getWidth(); x++) 
             for (int y = 0; y < img.getHeight(); y++) 
              // check if the RGB integer is an odd number 
              if (img.getRGB(x, y) % 2 != 0) 
               { 
                // Report the failing 
                System.out.println("It didn't work :("); 
                // Stop the loop 
                x = img.getWidth(); 
                y = img.getHeight(); 
               } 
           } 
          catch (Exception e) 
           { 
            e.printStackTrace(); 
           } 
         } 
    
        public static File getFile() 
         { 
          // set up a file chooser that only accepts jpgs 
          JFileChooser chooser = new JFileChooser(); 
          chooser.setFileFilter(new FileNameExtensionFilter("JPG Images only", "jpg")); 
    
          // This will represent our loaded file 
          File imageFile = null; 
    
          // Select a file 
          chooser.showOpenDialog(null); 
          imageFile = chooser.getSelectedFile(); 
    
          // Check we can do stuff to this file 
          System.out.println("Exists: " + imageFile.exists()); 
          System.out.println("Can Read: " + imageFile.canRead()); 
          System.out.println("Can Write: " + imageFile.canWrite()); 
          System.out.println(); 
    
          return imageFile; 
         } 
    } 
    
  • 답변

    1

    , 당신은 당신의
    눈으로 시각이 감지되지 않습니다. 내가 그랬던 것처럼 당신이 단지 1

    for (int x = 0; x < img.getWidth(); x++) 
        for (int y = 0; y < img.getHeight(); y++) 
         // check if the RGB integer is an odd number 
         if (img.getRGB(x, y) % 2 != 0) 
          // make it an even number if it is odd (the OCD god demands it!) 
          img.setRGB(x, y, 0); /// A /// 
    

    변경이 줄 /// A ///하여 RGB 값을 변경하고 당신이 그것을 겹쳐 볼 수 있기 때문이다.

    물론 테스트 할 사진에 따라 다릅니다.
    img.getRGB(x, y)이 절대로 이상하지 않으면 img.setRGB이 절대로 실행되지 않습니다.

    +0

    그래서이 줄을 /// img.setRGB (x, y, 0)로 설정했습니다. /// 이미지를 수정하는 동안, 그것은 단순한 색상으로 설정하는 대신 이상한 일들을 했었습니다. 기본 이미지는 보여 주지만, 대부분 정전기에서 사라졌습니다. 도대체 무슨 일이 일어나고 있니?! 그것은 마치 흰색과 검은 색의 정적 배경에 원본 이미지를 겹치려고하는 것과 같습니다. 이건 jpg 압축과 관련이 있습니까? – Troyseph

    +0

    정확히 무엇을 하려는지는 모르지만 이미지는 덮어 씁니다. 이것은 당신의 질문이었습니다. –

    +0

    위의 예제는 정말 코드가 다운되었습니다. 홀수 번호의 픽셀이 '1'을 나타내는 픽셀과 심지어 '0'을 나타내는 픽셀을 사용하여 이미지에서 데이터를 숨겨서 놀았습니다. 따라서 이상적으로 픽셀을 변경하고 싶습니다. 값 하나가 변경되지 않습니다. 내 문제는 만약 당신이 원래의 프로그램을 실행하고 심지어 모든 픽셀을 확인한 다음 그 이미지를 다시 검사하면 여전히 홀수 픽셀을 가지고 있습니다 ... – Troyseph