在Java中使用透明度将色调应用于灰度png图像

时间:2014-03-21 15:42:57

标签: java colors bufferedimage alpha

我需要在不影响透明度本身的情况下对具有透明度的灰度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;}

任何提示?

1 个答案:

答案 0 :(得分:0)

使用Color constuctor that takes two arguments

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

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

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

  

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

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