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();

この 2 番目の方法はほぼ 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 に答える