如何获取定义java BufferedImage.getSubimage的指定区域的数据?

问题描述 投票:0回答:1

我有以下代码从 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 字节???

java bufferedimage
1个回答
0
投票

感谢对我帖子的评论,我找到了解决方案:

// 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();
© www.soinside.com 2019 - 2024. All rights reserved.