简体   繁体   中英

Java writing png file makes everything transparent

I am currently trying to save a BufferedImage to a png file:

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++;
                }
            }

Here is the getBasicColor function:

@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;
}

And here are the 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;
}

}

Whenever I try to save the file with the following code:

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();
            }

I get problems because instead of having the correct color I get either a highly transparent color or no color at all.

Thank you for any help,

Lucas

Assuming pixels are correcty set, use this:

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

To check that pixels look what you want paint image in some component. If it doesnt look good then some problem exists in your colors. Print out basicColor.getRed() etc. to see that they are right.

Im not sure of the context of the code but should x not be changed to width and y be changed to height?

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++;
            }
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM