我一直在尝试使用java进行一些基本的图像处理(经过很长一段时间的间隔)。
我对原始图像进行的任何操作并将其另存为新图像 -> o/p 图像总是显得暗淡(可能是不透明度或透明度的问题)。
我正在下面粘贴我用来完成这项工作的函数:
//返回模糊的java缓冲图像
public static BufferedImage blurImage(BufferedImage image)
{
int w = image.getWidth();
int h = image.getHeight();
int alpha = 0;
int red, green, blue, newPix;
int pix[] = null;
BufferedImage newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
for(int i=0,j=0; i<w; i++)
{
for(j=0; j<h; j++)
{
pix = getSurroundingPixels(image, i>0?i-1:0, i<w-1?i+1:w-1, j>0?j-1:0, j<h-1?j+1:h-1);
red = green = blue = 0;
for(int k=0; k<pix.length; k++)
{
red += (pix[k]>>16) & 0xFF;
green += (pix[k]>>8) & 0xFF;
blue += (pix[k]) & 0xFF;
}
alpha = (image.getRGB(i,j)>>24) & 0xFF;
red /= pix.length;
green /= pix.length;
blue /= pix.length;
newPix = ((alpha<<24) | (red<<16) | (green<<8) | blue);
newImage.setRGB(i,j, newPix);
}
}
return newImage;
}
如果有人在这个问题上帮助我,我将不胜感激。
最佳答案
I have now replaced
BufferedImage.INT_TYPE_ARGB
withBufferedImage.INT_TYPE_RGB
, after this, the [processed] image doesn't appear dull, and [it] looks normal. Can you please explain why does this happen?
TYPE_INT_ARGB
有一个DirectColorModel
和 alpha; TYPE_INT_RGB
有一个DirectColorModel
没有 alpha。您的算法缩放 RGB
,但克隆 A
。据猜测,您的测试图像是不透明的,可能是 .jpg
图像,需要 BufferedImage.TYPE_INT_RGB
。您可能想使用此 example 检查您的图像缩放 A
或这个 example该图说明了 setRGB()
完成的颜色转换。
关于java - Java中的图像透明度或不透明度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14747223/