2016-04-08 5 views
0

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

+0

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

Antwort

0

Im dem Kontext des Codes nicht sicher, aber soll x nicht auf Breite und y Höhe geändert wird geändert werden?

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

Nein, in diesem Fall ist es egal, es liest flache Koordinaten –

1

Unter der Annahme, Pixel sind correcty Satz, verwenden diese:

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

Um zu überprüfen, dass Pixel sehen, was Sie malen Bild in irgendeiner Komponente wollen. Wenn es nicht gut aussieht, gibt es ein Problem in Ihren Farben. Drucken Sie basicColor.getRed() usw. aus, um zu sehen, dass sie richtig sind.

+0

Vielen Dank, ich arbeitete! –

Verwandte Themen