我创建了一个带有像素列表的位图类。 Pixel类具有位置和颜色。现在我试图从BufferedImage获取一个位图。
这是我尝试过的代码:
private static Bitmap fromImage(BufferedImage image) {
Bitmap bitmap = new Bitmap();
for (int x = image.getMinX(); x < image.getWidth(); x++) {
for (int y = image.getMinY(); y < image.getHeight(); y++) {
bitmap.setPixel(new Pixel(RGBAColor.fromColor(
new Color(image.getRGB(x, y))), new Vector2(x, y)));
}
}
return bitmap;
}
public static Bitmap fromImage(String path) {
try {
BufferedImage img = ImageIO.read(Galaxy2D.class.getResource(
"/com/mcmastery/galaxy2d/resources/" + path));
BufferedImage conImg = new BufferedImage(img.getWidth(), img.getHeight(),
BufferedImage.TYPE_INT_ARGB);
conImg.createGraphics().drawImage(img, 0, 0, null);
return Bitmap.fromImage(conImg);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
它有效,但是当它将图像绘制到屏幕上时会扭曲它
原始图片:http://gyazo.com/0832ebf26f940b6dbf218e43101e63f8.png
使用位图方法绘制到屏幕的图像:http://gyazo.com/c4b776f0e5fa0e54c167c10947582834.png
我也尝试过DataBufferInt,它仍会产生相同的结果。对于其他图像,它只是将一些像素的位置改变到接近它们应该位于的位置。但是对于上面的十字准线,它会变黑并扭曲它。
答案 0 :(得分:0)
不确定Bitmap的用途(我在JDK7 API中找不到它)。
也许您可以使用getSubImage(...)
的{{1}}方法。