0

我最近发现我正在使用的 ImageIO 库正在将图像写入字节数组/流的速度非常慢,并且从

BufferedImage img;//initialized elsewhere
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img,"png",baos);

BufferedImage img;//initialized elsewhere
byte[] argb = ((DataBufferByte) img.getRaster().getDataBuffer()).getData();

虽然第二种方法快了近 70 倍,但我找不到从这个 argb 字节数组重新创建 BufferedImage 的快速方法。

4

1 回答 1

0

好吧,我不会说传递原始像素通常是一个好主意,但它可能适合这个特定的用例。

根据评论中的讨论,它应该和以下一样难:

DataBuffer buffer = new DataBufferByte(argb, argb.length); // arg is your input array
ColorModel cm = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[]{8, 8, 8, 8}, true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE);

return new BufferedImage(cm, Raster.createInterleavedRaster(buffer, width, height, width * 4, 4, new int[] {0, 1, 2, 3}, null), false, null);

argb所有这些都假设您在数组中确实有 ARGB 像素,width并且这height是已知的。使所有数组和颜色模型保持不变以获得更好的性能。

于 2013-09-26T15:45:31.007 回答