【问题标题】:Apply tint to grayscale png image with transparency in Java在Java中将色调应用于具有透明度的灰度png图像
【发布时间】:2014-03-21 15:42:57
【问题描述】:

我需要在不影响透明度本身的情况下将色调应用于具有透明度的灰度 BufferedImage,这是我使用的方法,但是当我尝试在画布内的另一个图像上绘制它时,原始图像的透明度不见了,留下一个原始选定颜色的正方形......

private BufferedImage colorize(BufferedImage original,Color tint) { //TODO fix!!!

BufferedImage img = new BufferedImage(original.getWidth(), original.getHeight(),BufferedImage.TYPE_4BYTE_ABGR);

int redVal=tint.getRed();
int greenVal=tint.getGreen();
int blueVal=tint.getBlue();

for (int x=0;x<original.getWidth();x++) for (int y=0;y<original.getHeight();y++) {
    Color pixelVal=new Color(original.getRGB(x, y));
    int grayValue=pixelVal.getRed();  //Any basic color works the same
    int alpha=pixelVal.getAlpha();
    int newRed= (redVal*(grayValue))/255;
    int newGreen= (greenVal*grayValue)/255;
    int newBlue= (blueVal*grayValue)/255;
    img.setRGB(x, y, new Color(newRed,newGreen,newBlue,alpha).getRGB());
}
return img;}

有什么提示吗?

【问题讨论】:

标签: java colors bufferedimage alpha


【解决方案1】:

使用Color constuctor that takes two arguments

 Color pixelVal = new Color(original.getRGB(x, y), true);

如果hasAlpha 参数为true,则此构造函数创建一个具有ARGB 颜色的Color

单参数构造函数Color(int)考虑了透明度。来自 JavaDoc:

使用指定的组合 RGB 值创建不透明的 sRGB 颜色 [...] Alpha 默认为 255。

除此之外,您的代码应该可以工作。 :-)

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 2021-12-06
    • 2012-11-23
    • 2010-12-22
    • 2010-09-07
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多