java - 用透明像素填充 BufferedImage

标签 java bufferedimage

已询问此问题herehere - 但两者中的所有答案都不起作用(我花了一个多小时尝试所有答案)。

我认为部分问题是背景需要设置为白色且 alpha 为 0。这样,对于不支持 alpha 的程序或格式,颜色为白色而不是黑色。

所以我的问题是,如何将创建的 BufferedImage 设置为全透明白色背景?

我的代码(将其设置为不透明白色):

image = new BufferedImage((sectPage.getPaperWidth().getValue() * dpi) / 1440,
        (sectPage.getPaperHeight().getValue() * dpi) / 1440,
        BufferedImage.TYPE_INT_ARGB);
// bugbug - https://stackoverflow.com/questions/321736/how-to-set-dpi-information-in-an-image
graphics = image.createGraphics();

graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

// bugbug - want all clear
graphics.setColor(new Color(255, 255, 255));
graphics.fillRect(0,0,(sectPage.getPaperWidth().getValue() * dpi) / 1440, (sectPage.getPaperHeight().getValue() * dpi) / 1440);

还尝试传递 alpha 设置为 0 的颜色和 setBackground()。在这两种情况下都有背景。

最佳答案

这对我来说是一个愚蠢的错误。我把这个留给其他遇到同样问题的人。

graphics.setBackground(new Color(0x00FFFFFF, true));
graphics.clearRect(0, 0, sectPage.getPaperWidth().getValue(), sectPage.getPaperHeight().getValue());

有效。我的问题是我正在观看的程序使用黑色作为清晰的背景。它曾经使用标准的白色/灰色棋盘。所以对于任何认为这不起作用的人......

使用多个程序查看您的位图!

关于java - 用透明像素填充 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43898777/

相关文章:

java - 将 JPanel 导出到图像

java - 无法解析方法 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

java - JavaDoc 中的创建日期

java - 为什么老年代对象会被小 GC 清除

java - 如何在 java 中调整 bufferedimage n graphics2d 的大小?

java - 无需任何外部 API 即可处理视频

java - 为什么我的 PathResource 不可读?

java - 无法弄清楚 REGEX java

java - BufferedImage.setRGB 像素颜色错误

java - 我在 BufferedImage 中出现奇怪的黑色区域,我该如何解决这个问题?