Ich bin derzeit versucht, eine BufferedImage auf eine png-Datei zu speichern:Java Schreiben png-Datei macht alles transparent
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++;
}
}
Hier ist die getBasicColor Funktion:
@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;
}
Und hier sind die 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;
}
}
Jedes Mal, wenn ich versuche, die Datei mit dem folgenden Code zu speichern:
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();
}
ich Probleme bekommen, weil stattdessen die richtige Farbe, die ich entweder eine sehr transparente Farbe oder keine Farbe überhaupt zu bekommen.
Vielen Dank für jede Hilfe,
Lucas
Ich bin kein Experte, aber das 'int rgb = 65536 * basicColor.getRed() + 256 * basicColor.getGreen() + basicColor.getBlue(); System.out.println (rgb); 'sieht falsch aus. Die rgb-Werte sollen intakt in Bits verpackt sein, etwa so [http://stackoverflow.com/questions/2534116/how-to-convert-get-rgbx-y-integer-pixel-to-colorr-gba -in-java), aber deshalb benutze ich 'java.awt.Color' – MadProgrammer