首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BufferedImage越界

BufferedImage越界
EN

Stack Overflow用户
提问于 2013-03-12 23:43:11
回答 3查看 3.9K关注 0票数 0

我目前正在尝试创建一个用纯色填充的形状,然后将其输出为PNG。这是我的代码。

代码语言:javascript
复制
void CreateRedImage(int xSize, int ySize, String FileName){
        BufferedImage bf = new BufferedImage(xSize, ySize, BufferedImage.TYPE_INT_RGB);
        Color color = new Color(225, 000, 000);
        File f = new File(FileName + ".png");
        bf.setRGB(xSize, ySize, color.getRGB());
        try {
            ImageIO.write(bf, "PNG", f);
        } catch (IOException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }

不幸的是,当我运行我的代码时,我得到了这个错误消息。

代码语言:javascript
复制
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
    at sun.awt.image.IntegerInterleavedRaster.setDataElements(IntegerInterleavedRaster.java:301)
    at java.awt.image.BufferedImage.setRGB(BufferedImage.java:988)
    at ImageCreation.CreateBlueImage(ImageCreation.java:53)
    at Main.main(Main.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

现在,我知道问题出在这条线上:

代码语言:javascript
复制
bf.setRGB(xSize, ySize, color.getRGB());

我还不能弄清楚为什么我的代码不能工作。有谁有主意吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-12 23:54:46

如果您查看BufferedImagesetRGB(int x,int y,int rgb)docs,它会显示:-

将此BufferedImage中的像素设置为指定的RGB值。假设像素在默认的RGB颜色模型、TYPE_INT_ARGB和默认的sRGB颜色空间中。

它还说

如果坐标不在边界内,则可能会抛出ArrayOutOfBoundsException。但是,不能保证进行显式边界检查。

这意味着您的xSizeySize不在BufferedImage的边界内。

更新:-

再次从文档中,如果您仔细查看您碰巧使用的BufferedImage构造函数的签名,您将看到以下内容:

代码语言:javascript
复制
public BufferedImage(int width, int height, int imageType)

这意味着,在您的例子中,xSizeySize就是widthheight,而您的BI不一定要有 case (xSize,ySize)。我希望你能明白这一点。

票数 2
EN

Stack Overflow用户

发布于 2013-03-12 23:49:37

代码语言:javascript
复制
bf.setRGB(xSize, ySize, color.getRGB());

setRGB正在设置单个像素,x坐标为0 ..xSize - 1,y坐标如wise。

代码语言:javascript
复制
int c = color.getRGB();
for (int x = 0; x < xSize; ++x) {
    for (int y = 0; y < ySize; ++y) {
        bf.setRGB(x, y, color);
    }
}

代码语言:javascript
复制
Graphics2D g = bf.createGraphics();
g.setColor(color);
g.fillRect(0, 0, xSize, ySize);
g.dispose();

或者使用BufferedImage的光栅效果更好。

票数 0
EN

Stack Overflow用户

发布于 2013-03-12 23:51:25

您可能需要类似于bf.getGraphics().fillRect(...)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15365645

复制
相关文章

相似问题

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