使用BufferedImage方法getRGB(),图像大于256x256

时间:2014-04-26 13:08:49

标签: java arrays bufferedimage

基本上,我正在为一个游戏加载spritesheets,但是我遇到了一个不能超过256x256的错误,这对于大型动画片来说显然是一个问题。

主要问题是当我通过ImageIO.read()方法将图像加载为BufferedImage时,然后使用BufferedImage中的getRGB()方法,它输出到int []。这很好,除了int数组需要大于256x256(因为这是最大整数值)。

最后将值从int []转换为int [] [],因此数组的最终大小不是问题,但BufferedImage.getRGB()只输出到一维int数组,所以我怎么能用比这更大的东西做到这一点?这是我的代码的简要说明。

这时我尝试用不同的int []分析两个不同的图像,然后将它们都放入int [] []。

private void load() {
        int width = 0, height = 0;
        int[] pixelsr = null, pixelsrr = null;
        try {
            BufferedImage image = ImageIO.read(new FileInputStream(path));
            width = image.getWidth();
            height = image.getHeight();
            pixels = new int[width][height];
            if (width >= 256 || height >= 256) {
                pixelsr = new int[256 * 256];
                image.getRGB(0, 0, w, h, pixelsr, 0, 256);
                pixelsrr = new int[(width - 256) * (height - 256)];
                image.getRGB(256, 256, width, height, pixelsr, 0, width - 256);
                for (int i = 0; i < pixelsr.length; i++) {
                    for (int ii = 0; ii < 256; ii++) {
                        for (int iii = 0; iii < 256; iii++) {
                            pixels[ii][iii] = pixelsr[ii + iii * 256];
                        }
                    }
                }
                for (int i = 0; i < pixelsrr.length; i++) {
                    for (int ii = 256; ii < width - 256; ii++) {
                        for (int iii = 256; iii < height - 256; iii++) {
                            pixels[ii][iii] = pixelsr[ii + iii * (width - 256)];
                        }
                    }
                }
            } else {
                pixelsr = new int[width * height];
                image.getRGB(0, 0, w, h, pixelsr, 0, width);
                for (int i = 0; i < pixelsr.length; i++) {
                    for (int ii = 0; ii < width; ii++) {
                        for (int iii = 0; iii < height; iii++) {
                            pixels[ii][iii] = pixelsr[ii + iii * width];
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

我已经坚持了好几个小时,无法想办法做到这一点,到目前为止还没有见过其他人这个问题。

1 个答案:

答案 0 :(得分:1)

来自doc

public int[] getRGB(int startX,
           int startY,
           int w,
           int h,
           int[] rgbArray,
           int offset,
           int scansize)
  

返回默认RGB颜色模型中的整数像素数组   (TYPE_INT_ARGB)和默认的sRGB颜色空间,来自的一部分   图像数据。

wh参数可让您指定要检索的区域的大小。

使用二维数组,您可以将图像的每一列存储在不同的一维数组中。

我还没有对此进行过测试,但类似的东西应该有用。

for(int i = 0; i < width; i++){
    image.getRGB(i, 0, 1, height, pixels[i], 0, stride);
}