【问题标题】:Can't get correct alpha values from individual BufferedImage pixels无法从单个 BufferedImage 像素中获取正确的 alpha 值
【发布时间】:2014-12-22 23:16:33
【问题描述】:

我需要获取 RGBA 值,修改 RGB,然后再次设置 RGB(和 A)值。

但是,它似乎为所有像素返回 255,即使我知道我正在加载的图像中有透明像素。

这是一个 SSCCE

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class TestImage {

    public static void main(String args[]) {
        try {
            BufferedImage image = ImageIO.read(new File("/home/affy/Pictures/salamenceavatar.png"));

            BufferedImage buff = new BufferedImage(
                    image.getWidth(),
                    image.getHeight(),
                    BufferedImage.TYPE_INT_ARGB
            );

            Graphics2D g = buff.createGraphics();
            g.drawImage(image, 0, 0, null);

            for(int x = 0; x < image.getWidth(); x++) {
                for(int y = 0; y < image.getHeight(); y++) {
                    Color c = new Color(buff.getRGB(x, y));
                    int alpha = c.getAlpha();
                    System.out.println(alpha);
                }
            }
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

【问题讨论】:

  • 我认为您需要让我们知道您看到的错误消息、异常或错误行为。 “我不能”通常是不够的信息。

标签: java image swing alpha


【解决方案1】:

改用Color(int, boolean),将true 传递给它,告诉它您要从提供的打包int 中提取alpha 值

Color c = new Color(buff.getRGB(x, y), true);

来自 JavaDocs...

使用指定的组合 RGBA 值创建 sRGB 颜色 由第 24-31 位的 alpha 分量和第 24-31 位的红色分量组成 位 16-23、位 8-15 中的绿色分量和蓝色分量 在位 0-7。如果 hasalpha 参数为 false,则 alpha 默认为 255.

参数:

rgba - 组合的 RGBA 组件
hasalpha - 如果 alpha 位有效,则为 true;错误的 否则

【讨论】:

  • 我相信我试过了,我想我搞砸了,它现在可以工作了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多