【发布时间】:2014-08-06 01:43:02
【问题描述】:
我正在尝试使用 ImageIO 读取和修改 png 图像,并将其作为 Android 中的可绘制资源读取。
现在java代码如下:
BufferedImage im = ImageIO.read(new File(inFilePath));
WritableRaster raster = image.getRaster();
DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
byte imBytes[] = buffer.getData();
这给了我一个大小约为 140k 的字节数组,用于示例文件。 接下来我尝试使用 BitmapFactory 读取它:
Drawable drawable = context.getResources().getDrawable(getImageResourceIdWithKeys());
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 200, stream);
byte[] imBytes = stream.toByteArray();
这给了我一个大小约为 52k 的字节数组,接下来将其作为原始资源读取会得到大约 24k,这是磁盘上的大小。现在我知道PNG文件在磁盘上是压缩的,但是我不明白为什么在获取未压缩版本时会得到不同的字节数组。有什么方法可以在 Android 上以相同的方式读取图像并使用标准 Java API 吗?
【问题讨论】:
标签: java android javax.imageio bitmapfactory