2010-12-03 2 views
4

투명도가있는 TYPE_4BYTE_ABGR imageType의 BufferedImage가 있는데이를 TYPE_3BYTE_BGR BufferedImage로 변환하고 싶습니다. TYPE_3BYTE_BGR에 TYPE_4BYTE_ABGR 이미지를 그리려고했지만 색이 바뀌 었습니다.TYPE_4BYTE_ABGR에서 TYPE_3BYTE_BGR로 변환

투명한 이미지를 흰색 배경에 놓는 것이 목표입니다. 투명한 이미지를 .jpg에 TYPE_4BYTE_AGBR 이미지를 작성하면 검은 색 투명 영역이 생기기 때문에 흰색 배경에 투명한 이미지를 넣는 것이 목표입니다.

+0

"변경된 색상"이란 무엇을 의미합니까? 어떤 색깔? 알파가있는 픽셀 만? – Robert

+0

색상이 반전 된 것처럼 보입니다. ABGR의 ABG를 BGR로 그냥 사용했다고 생각합니다. –

+0

그릴 때 사용한 코드를 보여줄 수 있습니까? 그 결과 색이 바뀌 었습니까? 나는 그것을 매우 이상하다고 생각하지만 + 나는 호기심이 많다. :-) – haraldK

답변

1

이것은 필요한 코드입니다. 알파 채널이있는 새 이미지에 100 % 알파와 동일한 색상을 넣어야합니다.

// bufferedImage is your image. 
if (bufferedImage.getType() == BufferedImage.TYPE_3BYTE_BGR) { 
    BufferedImage bff = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_4BYTE_ABGR); 
    for (int y = 0; y < bufferedImage.getHeight(); ++y) { 
     for (int x = 0; x < bufferedImage.getWidth(); ++x) { 
     int argb = bufferedImage.getRGB(x, y); 
     bff.setRGB(x, y, argb & 0xFF000000); // same color alpha 100% 
     } 
    } 
    return bff; 
} else { 
    return bufferedImage; 
} 

흰색 배경에 투명한 이미지를 넣으려면 다른 유형의 새 BufferedImage를 사용해야합니다. 그렇게하는 코드는 다음과 같습니다.

// bufferedImage is your image. 
if (bufferedImage.getType() == BufferedImage.TYPE_4BYTE_ABGR) { 
    for (int y = 0; y < bufferedImage.getHeight(); ++y) { 
     for (int x = 0; x < bufferedImage.getWidth(); ++x) { 
      int argb = bufferedImage.getRGB(x, y); 
      if((argb & 0x00FFFFFF) == 0x00FFFFFF){ //if the pixel is transparent 
       bufferedImage.setRGB(x, y, 0xFFFFFFFF); // white color. 
      } 
     } 
    } 
    return bufferedImage; 
}