首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java BufferedImage.getRGB () -坐标越界

Java BufferedImage.getRGB () -坐标越界
EN

Stack Overflow用户
提问于 2015-01-25 20:28:06
回答 3查看 4.6K关注 0票数 0

所以,我试着用BufferedImage中特定像素的颜色.

代码语言:javascript
运行
复制
public void LoadImageLevel (BufferedImage image) {

    int w = image.getWidth ();
    int h = image.getHeight ();

    System.out.println (w + " " + h);

    for (int xx = 0; xx < h; xx++) {

        for (int yy = 0; yy < w; yy++) {

            int pixel = image.getRGB (xx, yy);

            int red = (pixel >> 16) & 0xff;
            int green = (pixel >> 8) & 0xff;
            int blue = (pixel) & 0xff;

            if (red == 255 && green == 255 && blue == 255) {

                handler.addObject (new Block (xx * 32, yy * 32, ObjectID.Block, 32, 32));
            }
        }
    }
}

它由主类构造函数调用:

代码语言:javascript
运行
复制
    ImageLoader imageLoader = new ImageLoader ();

    level = imageLoader.loadImage ("/levels/level_test.png");

    LoadImageLevel (level);

BufferedImage是从我的BufferedImageLoader类加载的:

代码语言:javascript
运行
复制
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageLoader {

    private BufferedImage image;

    public BufferedImage loadImage (String path) {

        try {

            image = ImageIO.read (getClass ().getResource (path));

        } catch (IOException e) {

            e.printStackTrace ();
        }

        return image;
    }
}

当我运行该项目时,我会得到以下错误:

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:   Coordinate out of bounds!
    at sun.awt.image.ByteInterleavedRaster.getDataElements(Unknown Source)
    at java.awt.image.BufferedImage.getRGB(Unknown Source)
    at com.main.index.Game.LoadImageLevel(Game.java:190)
    at com.main.index.Game.<init>(Game.java:41)
    at com.main.index.Game.main(Game.java:206)

第190行是"int像素= image.getRGB (xx,yy)“,第41行是构造函数中调用它的地方,第206行是主要方法。

提前谢谢!^_^

EN

回答 3

Stack Overflow用户

发布于 2016-12-25 14:27:20

问题在于:

代码语言:javascript
运行
复制
int pixel = image.getRGB (xx, yy);

它应该是:

代码语言:javascript
运行
复制
int pixel = image.getRGB (yy, xx);
票数 3
EN

Stack Overflow用户

发布于 2015-01-25 20:31:51

您的xx从0到高度,而不是从0到宽度。您的yy从0到宽度,而不是从0到高度。

票数 1
EN

Stack Overflow用户

发布于 2015-11-16 18:42:34

代码语言:javascript
运行
复制
level = imageLoader.loadImage ("/levels/level_test.png");

您正在使用的图像应该小于主窗口的总宽度和高度。在这种情况下,RGB值被拍摄到大小为2^X的照片,其中X=1,2,3,4,5,6,7,8,9.。。

试一试:将level_test.png的大小调整为512个像素。

上面是这方面的解决方案,因为Array包含边界。

代码语言:javascript
运行
复制
java.lang.ArrayIndexOutOfBoundsException:   Coordinate out of bounds!
at sun.awt.image.ByteInterleavedRaster.getDataElements(Unknown Source)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28141099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档