我有以下代码从 JAVA BufferedImage(8 位灰度)中提取子图像:
// create BufferImage from original image (480px x 400px)
BufferedImage img = new BufferedImage(origImage.getWidth(), origImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
// fill BufferImage with bytes array from original image
img.getRaster().setDataElements(0, 0, img.getWidth(), img.getHeight(), origBytes);
// Crop BufferedImage by range of interest (e.g. 100 x 50 px)
BufferedImage roiSubImage = img.getSubimage(roiLimits[0], roiLimits[2], roiLimits[1], roiLimits[3]);
// convert cropped image back to byte array
DataBufferByte croppedBuffer = (DataBufferByte) roiSubImage.getRaster().getDataBuffer();
bytes[] outputBytes = new byte[croppedBuffer.getData().length];
outputBytes = dataBuffer.getData();
现在 - outputBytes 中的数据与 origImage 中的数据相同(正如 BufferedImage.getSubImage 的文档所预期的那样。)。
如何获得仅代表感兴趣的裁剪区域的字节数组,即感兴趣区域中的 5000 字节???
感谢对我帖子的评论,我找到了解决方案:
// create BufferImage from original image (480px x 400px)
BufferedImage img = new BufferedImage(origImage.getWidth(), origImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
// fill BufferImage with bytes array from original image
img.getRaster().setDataElements(0, 0, img.getWidth(), img.getHeight(), origBytes);
Rectangle roi = new Rectangle(roiLimits[0], roiLimits[2], roiLimits[1], roiLimits[3]);
byte[] outBytes = (DataBufferByte) img.getData(roi).getDataBuffer().getData();