我当前正在尝试将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;
}
下面是基本颜色:
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();
}
我遇到了问题,因为我得到的不是正确的颜色,而是高度透明的颜色,或者根本没有颜色。
谢谢你的帮助,
Lucas
假设像素设置正确,则使用以下方法:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
image.setRGB(0, 0, width, height, pixels, 0, width);
检查像素是否看起来像您想要在某个组件中绘制的图像。如果它看起来不好看,那么你的颜色就有问题了。打印出basicColor.getRed()等,看看它们是否正确。
我不确定代码的上下文,但x不应该改为width,y应该改为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++;
}
}