2016-04-08 22 views
0

Şu anda bir png dosyasına bir BufferedImage kurtarmaya çalışıyorum yaparJava yazma png dosya şeffaf her şey

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

}

Aşağıdaki kod ile dosyayı kaydetmeye çalıştığınızda zaman:

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

Çünkü bunun yerine son derece şeffaf renk veya renk yok hiç ya olsun doğru renge sahip olma sorunlarını olsun.

kod bağlam emin

Lucas'a, herhangi bir yardım için

+0

I) (uzman değilim ama bu 'int rgb = 65536 * basicColor.getRed() + 256 * basicColor.getGreen() + basicColor.getBlue; System.out.println (rgb); 'yanlış görünüyor. rgb değerleri biraz paketlenmiş int [bu] gibi bir şey (http://stackoverflow.com/questions/2534116/how-to-convert-get-rgbx-y-integer-pixel-to-colorr-gba olarak varsayalım -in-java), ama bu yüzden kullanıyorum java.awt.Color ' – MadProgrammer

cevap

0

Im Teşekkür ederim ama x genişlik değiştirilmemesi gerektiğini ve y yüksekliğine değiştirilebilir?

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

Hayır, bu durumda önemli değil, düz koordinatları okuyor –

1

varsayarsak pikseller correcty kümesidir, bunu kullanın:

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

piksel bazı bileşende boya görüntüyü istediğiniz bak ne olduğunu kontrol etmek için. Eğer iyi görünmüyorsa, renklerinde bazı problemler vardır. haklılar olduğunu görmek vb basicColor.getRed() yazdırın.

+0

Çok teşekkür ederim, çalıştım! –