我正在尝试使用BufferedImage
调整RescaleOp
的对比度。在没有Alpha通道的情况下更改图像的对比度可以正常工作,但对于具有Alpha通道的图像,它会创建黄色色调;我做错了什么?
为了验证问题是由于alpha通道我将原始文件加载到Gimp中,添加了一个alpha通道,然后将文件导出到另一个png图像,这产生了第二个图像我试图改变对比度。 / p>
public class Test
{
public static void main(String[] args) throws IOException
{
changeContrast(new File("contrast/base_image_without_alpha.png"),
new File("contrast/output_without_alpha.png"));
changeContrast(new File("contrast/base_image_with_alpha.png"),
new File("contrast/output_with_alpha.png"));
}
private static void changeContrast(File sourceImageFile, File targetImageFile) throws IOException
{
BufferedImage image = ImageIO.read(sourceImageFile);
RescaleOp rescaleOp = new RescaleOp(1.8f, 0, null);
rescaleOp.filter(image, image);
ImageIO.write(image, "png", targetImageFile);
}
}
为自己尝试的图片:http://www.mediafire.com/file/15r1zh27ccjj1w1/contrast.zip
MCVE为自己尝试(轻松)
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import java.net.*;
public class TestAlphaRescale {
public static void main(String[] args) throws Exception {
File f = new File("output_without_alpha.png");
URL url = new URL("https://i.stack.imgur.com/S3m9W.jpg");
Desktop desktop = Desktop.getDesktop();
changeContrast(url,f);
desktop.open(f);
desktop.browse(url.toURI());
f = new File("output_with_alpha.png");
// with alpha
url = new URL("https://i.stack.imgur.com/memI0.png");
changeContrast(url,f);
desktop.open(f);
desktop.browse(url.toURI());
}
private static void changeContrast(URL sourceImageURL, File targetImageFile) throws IOException {
BufferedImage image = ImageIO.read(sourceImageURL);
RescaleOp rescaleOp = new RescaleOp(1.8f, 0, null);
rescaleOp.filter(image, image);
ImageIO.write(image, "png", targetImageFile);
}
}
答案 0 :(得分:0)
我通过更新到Java 9修复了这个问题。
这似乎是Java 8中的一个错误,现在已经在Java 9中修复了。我最初使用JDK1.8.0_144并收到黄色调,我现在使用JDK-9.0.4并且不再有问题。现在,无论有没有alpha通道,图像看起来都一样。