Java编写png文件使一切都透明

时间:2016-04-08 02:14:18

标签: java arrays image graphics bufferedimage

我目前正在尝试将BufferedImage保存到png文件中:

for(int x = left.getBlockX(); x < (left.getBlockX() + height); x++){
                for(int z = left.getBlockZ(); z < (left.getBlockZ() + width); z++){
                    pixels[i] = getBasicColor(new Location(left.getWorld(), x, left.getBlockY(), z));
                    i++;
                }
            }

这是getBasicColor函数:

@SuppressWarnings("deprecation")
public static int getBasicColor(Location location){
    if(location.getBlock().getType().equals(Material.WOOL)){
        Byte data = location.getBlock().getData();
        for(BasicColor basicColor : BasicColor.values()){   
            if(data.equals(basicColor.getDyeColor().getData())){
                int rgb = 65536 * basicColor.getRed() + 256 * basicColor.getGreen() + basicColor.getBlue();
                System.out.println(rgb);
                return rgb;
            }
        }
    }
    return 0;
}

以下是BasicColors:

public enum BasicColor {

WHITE (255,255,255, DyeColor.WHITE),
BLACK (0,0,0, DyeColor.BLACK),
BLUE (0,0,255, DyeColor.BLUE),
CYAN (0, 255, 255, DyeColor.CYAN),
DARK_GRAY (169,169,169, DyeColor.GRAY),
GRAY (128,128,128, DyeColor.GRAY),
SILVER (192,192,192, DyeColor.SILVER),
GREEN (0,128,0, DyeColor.GREEN),
MAGENTA (255,0,255, DyeColor.MAGENTA),
ORANGE (255, 165, 0, DyeColor.ORANGE),
PINK (255,192,203, DyeColor.PINK),
RED (255, 0, 0, DyeColor.RED),
YELLOW (255,255,0, DyeColor.YELLOW);

private final int red, blue, green;
private final DyeColor color;

private BasicColor(int red, int green, int blue, DyeColor color){
    this.red = red;
    this.green = green;
    this.blue = blue;
    this.color = color;
}

public Integer getRed(){
    return red;
}

public Integer getBlue(){
    return blue;
}

public Integer getGreen(){
    return green;
}

public DyeColor getDyeColor(){
    return color;
}

}

每当我尝试使用以下代码保存文件时:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            WritableRaster raster = (WritableRaster) image.getData();
            raster.setPixels(0, 0, width, height, pixels);
            image.setData(raster);
            try {
                ImageIO.write(image, "png", new File(name));
            } catch (IOException e) {
                e.printStackTrace();
            }

我遇到了问题,因为我没有使用正确的颜色,而是获得高度透明的颜色或根本没有颜色。

感谢您的帮助,

卢卡斯

2 个答案:

答案 0 :(得分:1)

假设像素设置正确,请使用:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.setRGB(0, 0, width, height, pixels, 0, width);

要检查像素是否在某些组件中显示您想要的图像。如果看起来不太好,那么你的颜色就会出现问题。打印出basicColor.getRed()等,看看它们是对的。

答案 1 :(得分:0)

我不确定代码的上下文但是x不能更改为宽度而y会更改为高度吗?

for(int x = left.getBlockX(); x < (left.getBlockX() + width); x++){
    for(int z = left.getBlockZ(); z < (left.getBlockZ() + height); z++){
        pixels[i] = getBasicColor(new Location(left.getWorld(), x, left.getBlockY(), z));
                i++;
            }
        }