gpt4 book ai didi

java - 当图像的 HSB 值更改时,BufferedImage 不会保持透明度

转载 作者:行者123 更新时间:2023-12-02 07:22:25 25 4
gpt4 key购买 nike

我正在开发一个简单的图像程序,用户可以在其中更改图像的 HSB 值。但是,当我更改图像的 HSB 值并转换回 RGB 时,它似乎会丢失其透明度或 alpha 值(透明度所在的位置会变黑)。以下是我的内容(我已将相关部分放在一起):

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),因此应保留 alpha 值。但是更改图像 HSB 值会导致新的缓冲图像在透明度应为黑色的位置上显示为黑色。如何编辑图像 HSB 值,然后创建新图像而不丢失图像透明度?

编辑:下面是应用一些随机色调、饱和度和亮度之前和之后的图像。正如您所看到的,图像失去了透明度。 enter image description here

最佳答案

Color c2 = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
enhancedImagePixels[i] = new Color(c2.getRed(), c2.getGreen(), c2.getBlue(),
c.getAlpha());

这很丑。 hsb[3] (alpha) 似乎没有转换。使用 image.getAlphaRaster() 可能是解决方案。

关于java - 当图像的 HSB 值更改时,BufferedImage 不会保持透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14033285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com