试图在导入的bmp图像中设置透明度

时间:2009-12-11 04:32:24

标签: java transparency

看一下之前对类似问题的回答,我开发了这段代码:

public static BufferedImage getImage(String imagefile) {

    BufferedImage image = null;

    try {

        image = javax.imageio.ImageIO.read(new java.io.File(imagefile));    

        int trans = image.getRGB(0,0);
        final int width = image.getWidth();
        int[] imgData = new int[width];

        for (int y = 0; y < image.getHeight(); y++) {
            // fetch a line of data from each image
            image.getRGB(0, y, width, 1, imgData, 0, 1);

            for (int x = 0; x < width; x++)
                if (imgData[x] == trans)
                    imgData[x] |= 0xFF000000;

            // replace the data
            image.setRGB(0, y, width, 1, imgData, 0, 1);
        }           

    } catch (Exception e) {

            e.printStackTrace();

    }

    return image;

}

在其中,我们的想法是采用左上角的颜色,并在与图像中的那种颜色匹配的所有像素上应用透明度。 问题出在我做的时候

g.drawImage(img, across, down, cells, cells, null);

我仍然得到透明的颜色。我忘记了某个地方的一步吗?

我使用bmp文件进行测试。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

当我在BufferedImage中使用alpha值时,我使用:

创建图像
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

那么您是否需要将所有像素复制/转换为能够识别alpha值的图像?

答案 1 :(得分:0)

知道了:

public static BufferedImage getImage(String imagefile) {

    BufferedImage image = null;
    BufferedImage image_copy = null;

    try {

        image = javax.imageio.ImageIO.read(new java.io.File(imagefile));    
        image_copy = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);

        int trans = image.getRGB(0,0);
        final int width = image.getWidth();
        int[] imgData = new int[width];

        for (int y = 0; y < image.getHeight(); y++) {
            // fetch a line of data from each image
            image.getRGB(0, y, width, 1, imgData, 0, 1);

            for (int x = 0; x < width; x++)
                if (imgData[x] == trans)
                    imgData[x] &= 0x00FFFFFF;

            // replace the data
            image_copy.setRGB(0, y, width, 1, imgData, 0, 1);
        }           

    } catch (Exception e) {

            e.printStackTrace();

    }

    return image_copy;

}

感谢您的帮助!

看起来这是一个逻辑错误。