【发布时间】:2016-09-27 14:35:42
【问题描述】:
我需要编写一个重采样函数来获取输入图像并在 Java 中生成输出图像。
图像类型为 TYPE_BYTE_GRAY。
由于所有像素都将被读取和写入,我需要一种有效的方法来访问图像缓冲区。
我不相信像 getRGB/setRGB 这样的方法会合适,因为它们会执行转换。我追求的功能可以让我最直接地访问存储的缓冲区,具有高效的地址计算、没有图像复制和最小的开销。
你能帮帮我吗?我找到了许多类型的示例,例如使用 WritableRaster,但没有一个足够完整。
更新:
正如@FiReTiTi 所建议的,诀窍是从图像中获取WritableRaster,并将其关联的缓冲区作为DataBufferByte 对象获取。
DataBufferByte SrcBuffer= (DataBufferByte)Src.getRaster().getDataBuffer();
然后您可以选择使用其getElem/setElem 方法直接访问缓冲区
SrcBuffer.setElem(i, getElem(i) + 1);
或提取字节数组
byte [] SrcBytes= SrcBuffer.getData();
SrcBytes[i]= SrcBytes[i] + 1;
这两种方法都有效。我还不知道性能有什么不同...
【问题讨论】:
-
您想对从图像中检索到的像素做什么?
-
@px06 如前所述,我正在编写一个(自定义)重采样函数,但这对答案有何影响?
-
第二个开始直接访问数组,我会说它必须更快。但我不确定它有多快。很高兴它成功了。
-
对不起,显然是“存在”,而不是“开始”。
标签: java image-processing