사용자가 이미지의 HSB 값을 변경할 수있는 간단한 이미지 프로그램에서 작업하고 있습니다. 그러나 이미지의 HSB 값을 변경하고 RGB로 다시 변환하면 투명도 또는 알파 값이 손실되는 것처럼 보입니다 (투명도가있는 곳에서는 검은 색으로 변합니다).이미지의 HSB 값이 변경 될 때 BufferedImage는 투명도를 유지하지 않습니다.
public static BufferedImage getEnhancedImagesHSB(BufferedImage image, float[] hsbOrg)
{
int height = image.getHeight();
int width = image.getWidth();
float[] hsb = new float[]{0,0,0,0};
int[] originalPixels = image.getRGB(0,0, width, height, null, 0, width);
int[] enhancedImagePixels = image.getRGB(0,0, width, height, null, 0, width);
for (int i = 0; i < originalPixels.length; i++)
{
Color c = new Color(originalPixels[i]);
int red =c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
hsb = Color.RGBtoHSB(red, green, blue, hsb);
hsb[ 3 ] = c.getAlpha()/255f;
hsb[0] = (float)(hsb[0] +(hsbOrg[0]/360.0));//hue
hsb[1] *= (hsbOrg[1]/100);
if(hsb[1] > 1.0)
hsb[1] = (float)0.9;
hsb[2] *= (hsbOrg[2]/100);
if(hsb[2] > 1.0)
{hsb[2] = (float)0.9;}
enhancedImagePixels[i] = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
}
BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB );
newImage.setRGB(0, 0, width, height, enhancedImagePixels, 0, width);
return newImage;
}
워드 프로세서 getRGB를()에서는 setRGB() 디폴트의 RGB 컬러 모델 (TYPE_INT_ARGB)를 사용하므로 알파 값에 따라 보존해야합니다 여기에 내가 (내가 함께 관련 부분을 넣었습니다) 아래가 무엇 . 그러나 이미지 HSB 값을 변경하면 투명성이 있어야하는 새 버퍼링 이미지의 색상이 검은 색이됩니다. 이미지 HSB 값을 편집 한 다음 이미지 투명도를 잃지 않고 새 이미지를 만들려면 어떻게해야합니까?
편집 : 아래는 임의의 색조, 채도 및 밝기가 적용된 전후의 이미지입니다. 보시다시피 이미지의 투명성이 사라졌습니다. 못생긴
더 도움이 빨리 들어, [SSCCE] (http://sscce.org/)을 게시 할 수 있습니다. 코드로 이미지를 생성하거나 이미지에 핫 링크하십시오. 또한 단어와 기호의 혼란에는 '?' 나는 묻는다. 질문 있습니까? –
내가 작성한 수정 사항을 확인하고 추가 정보가 필요한 경우 알려주십시오. 나는 이미지의 투명도를 보존하려고 노력하고 있지만 알파 값을 가져야하는 대신 흑인을 얻습니다. 감사합니다. – Sun