首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当图像的HSB值更改时,BufferedImage不会保持透明度

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

Stack Overflow用户
提问于 2012-12-26 03:06:49
回答 2查看 1.4K关注 0票数 0

我正在开发一个简单的图像程序,用户可以改变图像的HSB值。然而,当我更改图像的HSB值并转换回RGB时,它似乎丢失了它的透明度或Alpha值(它在透明度所在的地方变成了黑色)。下面是我所拥有的(我已经将相关的部分放在一起):

代码语言:javascript
复制
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值,然后创建新的图像?

编辑:下面是一些随机色调、饱和度和亮度应用前后的图像。如你所见,图像已经失去了透明度。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-27 00:30:54

代码语言:javascript
复制
Color c2 = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
enhancedImagePixels[i] = new Color(c2.getRed(), c2.getGreen(), c2.getBlue(),
        c.getAlpha());

这是丑陋的。似乎没有hsb3的转换。使用image.getAlphaRaster()可能是解决方案。

票数 1
EN

Stack Overflow用户

发布于 2012-12-27 03:53:40

感谢Joop Eggen为我指明了正确的方向。我直接将调整后的色调、饱和度、亮度和Alpha值写入图像光栅(使用setPixel())。下面是一篇讨论这个主题的很棒的文章。

Article.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14033285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档