Java - 将BufferedImage的像素复制到列表中

时间:2015-02-14 03:08:18

标签: java image

我创建了一个带有像素列表的位图类。 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,它仍会产生相同的结果。对于其他图像,它只是将一些像素的位置改变到接近它们应该位于的位置。但是对于上面的十字准线,它会变黑并扭曲它。

1 个答案:

答案 0 :(得分:0)

不确定Bitmap的用途(我在JDK7 API中找不到它)。

也许您可以使用getSubImage(...)的{​​{1}}方法。