Java中如何将数组存储的原始灰度图像数据保存为图片?
灰度图像原始byte数组转BufferedImage并保存
你可以直接操作BufferedImage的底层像素缓冲区完成数据转移,再用ImageIO类将图像保存为文件,完整实现代码如下:
import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.io.File; import javax.imageio.ImageIO; public class GrayImageProcessor { public static void main(String[] args) throws Exception { // 替换为API返回的实际尺寸和数据 int width = 640; int height = 480; // 注意你代码里的length应该是height,避免图像尺寸错误 byte[] buffer = API.readGrayScaleImageRawData(); // 创建灰度类型的BufferedImage实例 BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); // 转移原始像素数据到BufferedImage byte[] imageBuffer = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData(); System.arraycopy(buffer, 0, imageBuffer, 0, buffer.length); // 保存图像到本地,支持png、jpg等格式 ImageIO.write(bufferedImage, "png", new File("output_gray_image.png")); } }
核心逻辑说明
BufferedImage.TYPE_BYTE_GRAY类型的图像,底层用DataBufferByte存储像素值,每个字节对应一个0-255的灰度级- 通过
getRaster().getDataBuffer()获取图像的底层数据缓冲区,强制转换为DataBufferByte后可直接拿到内部字节数组 - 用
System.arraycopy高效复制原始数据,比逐像素赋值的性能高很多 - 务必确认
width和height参数与原始图像匹配,否则会出现图像拉伸、错位问题
内容的提问来源于stack exchange,提问作者DuJiang
相关产品推荐
相关产品推荐

