当前位置: 首页 > 面试题库 >

光栅之外的Java getSubimage()

呼延聪
2023-03-14
问题内容

我正在尝试拍摄图像并将其存储在16x16子图像数组中。我使用的图像是512x512像素。但是,在遍历循环时,getSubimage()被Raster异常停止。

这是代码:

public class TileList extends JPanel {

  private static final int width = 16;          //width of a tile
  private static final int height = width;
  private int col = 1;
  private int row = 1;

  private BufferedImage image;
  File tilesetImage = new File("image.png");
  BufferedImage tileset[];

  public void loadAndSplitImage (File loadImage) {
    try{
        image = ImageIO.read(loadImage);
    }catch(Exception error) {
        System.out.println("Error: cannot read tileset image.");
    }// end try/catch
    col = image.getWidth()/width;
    row = image.getHeight()/height;
    tileset = new BufferedImage[col*row];
  }// end loadAndSplitImage

  public TileList() {
    loadAndSplitImage(tilesetImage);
    setLayout(new GridLayout(row,col,1,1));
    setBackground(Color.black);

    int x=0;
    int y=0;
    int q=0;                                    //keeps track of tile #
    for (int i = 0; i < row; i++) {

        for (int j = 0; j < col; j++) {
            JPanel panel = new JPanel();
            tileset[q] = new BufferedImage(width, height, image.getType());
            tileset[q] = image.getSubimage(x,y,x + width,y + height);
            panel.add(new JLabel(new ImageIcon(tileset[q])));
            add(panel);
            x += width;
            q++;
        }// end for loop
        y += height;
        x = 0;
    }// end for loop
  }// end constructor
}// end class

这是错误:

Exception in thread "AWT-EventQueue-0" java.awt.image.RasterFormatException: (x
+ width) is outside of Raster
    at sun.awt.image.ByteInterleavedRaster.createWritableChild(ByteInterleav
edRaster.java:1245)
    at java.awt.image.BufferedImage.getSubimage(BufferedImage.java:1173)
    at TileList.<init>(TileList.java:59)
    at TileList.createAndShowGui(TileList.java:79)
    at TileList$1.run(TileList.java:88)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDo
main.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThre
ad.java:244)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.
java:163)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

问题答案:

您将错误的参数传递给getSubimage。文档说…

参数:
x-指定矩形区域的
左上角的X坐标y- 指定矩形区域的左上角的Y坐标
w- 指定矩形区域的宽度
h-指定高度矩形区域



您正在传递x, y, x + width, y + width,这意味着如果x= 256,则width实际上等于256 + 16 = 272

因此您的新图像将是… x + width = 256 + 272 = 528,它比您的图像区域宽。

你应该过去 x, y, width, heigh

tileset[q] = image.getSubimage(x, y, width, height);


 类似资料:
  • 我把我的问题简化了一点,希望它有意义。 我有三个栅格,我正在使用。 栅格是一个栅格,其土地覆盖属性值1为本地土地覆盖,0为非本地土地覆盖。 本地蒸散量和非本地蒸散量分别是本地物种和非本地物种的蒸散量。两个光栅的属性都在[015000]之间 id要做的是将1的所有值替换为nativeet值,将0的所有值替换为nonnativeet值。 我的想法是将土地覆盖光栅(值为1或0)转换为AET光栅(值介于0

  • 下面的代码在我的图像上生成两个框。我正计划进一步分析这些框内的像素。 在下面的例子中,在红色方块的情况下,我不想继续下去,因为它的右上角有黑色像素。而我想继续在绿色方块的情况下,因为它没有一个黑色像素沿着它的边缘。

  • 我有50多个需要裁剪的光栅文件(ASCII格式)。我已经以ASCII格式从ArcMap导出了遮罩,并将其加载到R中。如何使其适用于一行中的所有光栅,并以与之前相同的名称导出它们(当然是在不同的文件夹中,以避免覆盖)? 我知道光栅软件包中有裁剪功能,但到目前为止我从未使用过。我只是把它们堆放起来做进一步的栖息地分析。 到目前为止,我的代码:

  • 我正在尝试在R中设置一个randomForest,以便根据其他光栅图像对光栅图像进行分类。我的训练数据是一个完全填充的光栅图像,我想训练许多其他光栅,以尝试基于初始光栅创建光栅输出。代码示例如下: <代码>rf1 ...其中,是我的光栅格式的实际已知值,而到是我想用来预测trainingRaster1是什么的其他光栅图像。我知道您将使用向量或点的训练类来训练一系列光栅,但在我的情况下,我希望使用光

  • 在我的PostgreSQL数据库中,有一个栅格表和一个具有相同投影的点表。点表具有诸如 id、地址和几何等列。栅格表具有 id、r_proj4 和 rast 等列。栅格表的每一行描述一个栅格切片。如何检索每个点的栅格值? 我希望粗略的指导方针如何解决这个问题和PostGIS代码示例。

  • 我有几个目录,里面都是每日的气候数据。我需要将每日栅格合并为每周栅格,一些是通过值的总和,一些是通过值的平均值。到目前为止,我已经在目录(其中包含每日光栅文件)中创建了一个文件名向量,并为编写了一个