2016-11-01 4 views
0

코드에서 전체 이미지에 대해 픽셀의 알파 값을 100으로 설정하고 이미지를 읽는 동안 알파 값을 100으로 설정하겠습니다. 그러나 검색 부분에서 그것은 255 (기본값)를 제공합니다. 뭐가 잘못 되었 니 ? 어떻게 해결할 수 있을까요? 어떤 도움을 ...BufferedImage의 알파 값 조작하기

클래스 데모 {

Demo() 
{  
    try 
    { 

    BufferedImage im2 = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB); 
    File f2 = new File("test2.jpg"); 
    im2 = ImageIO.read(f2);  
    int width1 = im2.getWidth(); 
    int height1 = im2.getHeight(); 

    for(int i=0;i<height1;i++) 
    { 
     for(int j=0;j<width1;j++) 
     { 
      Color c = new Color(50,0,0,100); //Set the alpha value to 100 
      im2.setRGB(j,i,c.getRGB());   // for every pixel 
     } 
    } 
    File f = new File("Demo_copy.jpg"); 
    ImageIO.write(im2,"jpg",f); 

    // Retrieving......... 
    BufferedImage im1; 
    File f1 = new File("Demo_copy.jpg"); 
    im1 = ImageIO.read(f1); 
    int width = im1.getWidth(); 
    int height = im1.getHeight(); 
    for(int i=0;i<height;i++) 
    { 
     for(int j=0;j<width;j++) 
     { 
     int pixel = im1.getRGB(j,i); 
     Color c = new Color(pixel,true); 
     int a = c.getAlpha(); 
     System.out.println("Alpha value is :"+a); // Printing Alpha : 255 for every pixel 
     } 
    } 
    }catch(Exception e){} 
} 
public static void main(String [] ar) 
{ 
    new Demo(); 
} 

}

답변

0

을 이해할 수있을 것 new BufferedImage(...) 당신은 ImageIO.read(..)에서 새로운 값을 할당 그냥 버려지 im2에 할당 (쓰레기 수집) 후 . 새 값은 JPEG이며 알파가 없으므로 사용자가 설정 한 알파 값은 중요하지 않습니다. 그들은 항상 255 (완전히 불투명) 인 채로있을 것입니다.

대신에, 당신은 아마 이런 식으로 뭔가를하고 싶지 :

// Read opaque image... 
BufferedImage img = ImageIO.read(new File("test2.jpg")); 

// ...convert image to TYPE_INT_ARGB... 
BufferedImage im2 = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB); 

Graphics2D g = im2.createGraphics(); 
try { 
    g.drawImage(img, 0, 0, null); 
} 
finally { 
    g.dispose(); 
} 

// ... loop over and change alpha in im2 as before 

마지막으로, 당신은 당신이 값을 얻을 확실하게, 대신 JPEG의 PNG와 같은 무손실 알파를 지원하는 형식으로 이미지를 작성해야 당신은 기대 :

ImageIO.write(im2,"PNG", new File("Demo_copy.png")); 

PS를 : 그것은 단지 내장 된 자바 ImageIO에서 JPEG 플러그인/읽기 알파 값과 JPEG 파일을 작성 지원 등도 JPEG를 사용하여 작업 할 수 있습니다. 그러나 대부분의 다른 소프트웨어는 이것을 CMYK JPEG로 잘못 해석 할 것이며 색이 모두 잘못 보일 것입니다. 또한 JPEG은 손실이 많으므로 수신 측에서 예상 한 것처럼 정확한 알파 값 (100)을 보지 못할 가능성이 큽니다. 그래서 PNG를 사용하는 것이 좋습니다. 알파를 지원하는 TIFF 또는 다른 형식도 사용할 수 있지만 추가 플러그인이 필요합니다.

+0

Works 완벽하게. 감사합니다. –

+0

좋은 물건! 답변을 승인 된 것으로 표시하여 문제가 해결되었음을 나타냅니다. – haraldK

+0

선생님, 위의 해결책은 png 파일에 완벽하게 작동합니다. 하지만 jpg 파일로도 구현할 수있는 방법이 있습니까? 내가 선택한 jpg 이미지에서 내 선택의 가치와 같은 검색하고 싶습니다. –