2014-11-23 2 views
0

JavaBufferedImage가 있습니다. 전경은 검은 색이고 배경은 투명합니다. 이미지를 빨간색으로 다시 채색하고 싶습니다.Java 버퍼 된 이미지의 색을 변경하는 방법

다른 사람의 게시물을 읽었으며이 코드를 사용해 보았습니다. 그러나 이미지를 실행할 때 이미지가 완전히 투명 해집니다.

누구에게 아이디어가 있습니까? Java 2D 이미지 처리 라이브러리가 처음입니다. 감사.

imageIcon= new ImageIcon(getImageURL("/ImagesGun/GunBase.png")); 
    gunBaseImage= Utilities.toBufferedImage(imageIcon.getImage()); 

    int red = 0x00ff0000; 
    int green = 0x0000ff00; 
    int blue = 0x000000ff; 

    int width = gunBaseImage.getWidth(); 
    int height = gunBaseImage.getHeight(); 

    //Loop through the image and set the color to red 
    for(int x = 0; x < width; x++){ 
     for(int y = 0; y < height; y++){ 
      long pixel = gunBaseImage.getRGB(x, y); 
      if(pixel != 0){ 
       red = 0x00ff0000; 

       gunBaseImage.setRGB(x,y,red); 
      } 

     } 
    } 
+0

각 픽셀에 대해 getRGB 및 setRGB를 호출하면 속도가 느려지는데, 그 이유는이 메서드가 풀 컬러 공간 변환을 수행하려고하기 때문입니다. 이미지 처리를 위해서, BufferedImage의 배후에있는 int 배열에 액세스하는 편이 낫습니다. – lbalazscs

답변

3

빨간색의 완전히 투명한 값을 사용하고 있습니다. 색상 정의의 첫 번째 항목은 알파 값입니다. 완전히 불투명 한 색상을 원하면 ff를 첫 번째 값으로 사용해야합니다. 따라서 빨간색은 0xffff0000, 녹색 0xff00ff00 등이어야합니다. 이것은 검은 색이 ff000000이라는 것을 의미합니다.

+0

사실입니다. 나는 그가 불투명도를 그대로 유지하기 원한다면, 그 비트를 가려서 색 자체의 가치를 다루어야한다고 생각한다. 즉,'if (pixel! = 0) '체크를 바꿀 필요가 있다는 것을 의미한다. 그런 다음, 그의'if()'블록 내부에서, 그는 자신이 원하는 색상에 원래 불투명도를 추가하기 위해 bitwise AND 연산을 수행해야합니다. – hfontanez

+0

내 생각은 정확히 @hfontanez입니다. 그렇기 때문에'op (pixel! = 0xff000000)'을 할 수 있도록 opaque black이 0xff000000이라는 것을 언급했습니다. –

+0

그게 효과가! 고마워 @ 매튜! – user1104028

관련 문제