我正在尝试将我的2d颜色列表转换为实际图像,然后将其导出,但是,当我尝试使用它时,它会扭曲颜色(显示错误颜色)
import javafx.scene.paint.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
public class ImageAction {
public static void fromColorGrid(List<List<Color>> colorGrid) {
int width = colorGrid.size();
int height = colorGrid.get(0).size();
BufferedImage buffImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// Set each pixel of the BufferedImage to the color from the Color[][].
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
String colorStr = colorGrid.get(x).get(y).toString().replace("0x", "");
int rgb = Integer.parseInt(colorStr, 16);
System.out.println(colorStr + " " + rgb);
buffImage.setRGB(x, y, rgb);
}
}
try {
File outputfile = new File("saved.png");
ImageIO.write(buffImage, "png", outputfile);
} catch (IOException e) {
System.out.println("Ups");
}
}
}
我哪里错了?
答案 0 :(得分:0)
这一点对我来说似乎很奇怪:
String colorStr = colorGrid.get(x).get(y).toString().replace("0x", "");
int rgb = Integer.parseInt(colorStr, 16);
System.out.println(colorStr + " " + rgb);
buffImage.setRGB(x, y, rgb);
该代码依赖于JavaFX颜色类which explicitly states的toString()
方法:
此方法仅用于提供信息。返回字符串的内容和格式可能因实现而异。
相反,只需使用RGB值直接转换为AWT颜色:
Color fxColor = colorGrid.get(x).get(y);
java.awt.Color awtColor = new java.awt.Color((float) fxColor.getRed(),
(float) fxColor.getGreen(),
(float) fxColor.getBlue(),
(float) fxColor.getOpacity());
buffImage.setRGB(x, y, awtColor.getRGB());
上面不依赖于任何特定的toString()实现,并且在我的快速测试中,代码似乎可以正常使用它。