看一下之前对类似问题的回答,我开发了这段代码:
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文件进行测试。
感谢您的时间。
答案 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;
}
感谢您的帮助!
看起来这是一个逻辑错误。