gpt4 book ai didi

java - 为什么这个 GIF 在使用 Java ImageIO 调整大小时最终变成黑色方 block

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:22 26 4
gpt4 key购买 nike

Java ImageIO 正确显示此黑白图像 http://www.jthink.net/jaikoz/scratch/black.gif但是当我尝试使用这段代码调整它的大小时

public static BufferedImage resize2D(Image srcImage, int size)
{
int w = srcImage.getWidth(null);
int h = srcImage.getHeight(null);

// Determine the scaling required to get desired result.
float scaleW = (float) size / (float) w;
float scaleH = (float) size / (float) h;

MainWindow.logger.finest("Image Resizing to size:" + size + " w:" + w + ":h:" + h + ":scaleW:" + scaleW + ":scaleH" + scaleH);

//Create an image buffer in which to paint on, create as an opaque Rgb type image, it doesn't matter what type
//the original image is we want to convert to the best type for displaying on screen regardless
BufferedImage bi = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);

// Set the scale.
AffineTransform tx = new AffineTransform();
tx.scale(scaleW, scaleH);

// Paint image.
Graphics2D g2d = bi.createGraphics();
g2d.setComposite(AlphaComposite.Src);
g2d.drawImage(srcImage, tx, null);
g2d.dispose();
return bi;
}

我最终得到了一张黑色图像。我正在尝试缩小图像(缩略图),但即使出于测试目的将其调整得更大,它最终仍会变成黑色方 block 。

其他图像调整大小没问题,任何人都知道 gif/and 或 Java Bug 有什么问题

最佳答案

这是通过 ImageIO 加载时链接图像的 ColorModel 的字符串表示:

IndexColorModel: #pixelBits = 1 numComponents = 4 color space = java.awt.color.ICC_ColorSpace@1572e449 transparency = 2 transIndex   = 1 has alpha = true isAlphaPre = false

如果我理解正确的话,每个像素有一位,其中 0 位是不透明的黑色,1 位是透明的。您的 BufferedImage 最初是全黑的,因此在其上绘制黑色和透明像素的混合物不会产生任何效果。

尽管您使用的是 AlphaComposite.Src,但透明调色板条目的 R/G/B 值读取为零(我不确定这是否编码为 GIF 或只是 JDK 中的默认值。)

您可以通过以下方式解决它:

  1. 用全白像素初始化 BufferedImage
  2. 使用 AlphaComposite.SrcOver

因此,您的 resize2D 实现的最后一部分将变为:

// Paint image.
Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, size, size);
g2d.setComposite(AlphaComposite.SrcOver);
g2d.drawImage(srcImage, tx, null);

关于java - 为什么这个 GIF 在使用 Java ImageIO 调整大小时最终变成黑色方 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4607123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com