gpt4 book ai didi

java - 使用 PixelReader/PixelWriter JavaFX 获取图像的一部分

转载 作者:行者123 更新时间:2023-11-30 07:31:20 25 4
gpt4 key购买 nike

我尝试使用 JavaFX 获取图像的一部分,但当 y = 1 时代码失败。

这是代码:

public static Image crop(Image src, int col, int row) {
PixelReader r = src.getPixelReader();
int sx = col * Grid.SIZE; // start x
int sy = row * Grid.SIZE; // start y
int ex = sx + Grid.SIZE; // end x
int ey = sy + Grid.SIZE; // end y
int rx = 0; // x to be written
int ry = 0; // y to be written

System.out.println(sx + ", " + sy + ", " + ex + ", " + ey);

WritableImage out = new WritableImage(Grid.SIZE, Grid.SIZE);
PixelWriter w = out.getPixelWriter();

for(int y = sy; y < ey; y++, ry++) {
for(int x = sx; x < ex; x++, rx++) {
int c = r.getArgb(x, y);
w.setArgb(rx, ry, c);
System.out.println(rx + ", " + ry + ", " + x + ", " + y);
}
}
return out;
}

一切顺利,直到循环中的y变为1,然后会发生这种情况:

Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: 32, 1
at com.sun.prism.Image$BaseAccessor.getIndex(Unknown Source)
at com.sun.prism.Image$BaseAccessor.setArgb(Unknown Source)
at com.sun.prism.Image.setArgb(Unknown Source)
at javafx.scene.image.WritableImage$2.setArgb(Unknown Source)

我不知道出了什么问题。我会提供任何其他信息。

最佳答案

您遇到索引越界异常,因为您在开始每个新行时没有将 rx 重置为 0

但是,如果您想要 Grid.SIZE by Grid.SIZE 裁剪 src,从 (col, row ),更简单(并且可能性能更好)的方法是:

public static Image crop(Image src, int col, int row) {
PixelReader r = src.getPixelReader();
PixelFormat<IntBuffer> pixelFormat = PixelFormat.getIntArgbInstance() ;
int[] pixels = new int[Grid.SIZE * Grid.SIZE];
r.getPixels(col * Grid.SIZE, row * Grid.SIZE, Grid.SIZE, Grid.SIZE, pixelFormat,
pixels, 0, Grid.SIZE);
WritableImage out = new WritableImage(Grid.SIZE, Grid.SIZE);
PixelWriter w = out.getPixelWriter();
w.setPixels(0, 0, Grid.SIZE, Grid.SIZE, pixelFormat,
pixels, 0, Grid.SIZE);
return out ;
}

显然,如果 (col+1)*Grid.SIZE > src.getWidth()(row+1)*Grid.SIZE > src.getHeight(),您可以在方法中检查它,并根据需要抛出 IllegalArgumentException

关于java - 使用 PixelReader/PixelWriter JavaFX 获取图像的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com