使用jdk11原生api实现bitmap文件转换成图片

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import javax.imageio.ImageIO;

public class DataToImageConverter {

public static void main(String[] args) {
if (args.length != 4) {
System.err.println("Usage: java DataToImageConverter ");
return;
}

String dataFile = args[0];
int width = Integer.parseInt(args[1]);
int height = Integer.parseInt(args[2]);
String outputImageFile = args[3];

try {
byte[] imageData = readDataFile(dataFile);
if (imageData.length < width * height * 4) {
throw new IllegalArgumentException("Data file size is too small for the given width and height.");
}
BufferedImage image = createImageFromData(imageData, width, height);
saveImage(image, outputImageFile);
System.out.println("Image saved to: " + outputImageFile);
} catch (IOException e) {
e.printStackTrace();
}
}

private static byte[] readDataFile(String dataFile) throws IOException {
File file = new File(dataFile);
byte[] data = new byte[(int) file.length()];
try (FileInputStream fis = new FileInputStream(file)) {
fis.read(data);
}
return data;
}

private static BufferedImage createImageFromData(byte[] imageData, int width, int height) {
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
int[] pixels = new int[width * height];
ByteBuffer buffer = ByteBuffer.wrap(imageData).order(ByteOrder.BIG_ENDIAN);

try {
buffer.asIntBuffer().get(pixels);
} catch (BufferUnderflowException e) {
System.err.println("Buffer underflow exception occurred. Check the data file size and image dimensions.");
throw e;
}

image.setRGB(0, 0, width, height, pixels, 0, width);
return image;
}

private static void saveImage(BufferedImage image, String outputFile) throws IOException {
File file = new File(outputFile);
ImageIO.write(image, "png", file);
}
}

posted @ 2024-06-27 08:27  MingYu15  阅读(73)  评论(1)    收藏  举报