解码使用Okio和ContentResolver.openInputStream()

时间:2015-07-28 09:17:19

标签: android android-bitmap bitmapfactory okio

我有以下设置:使用Intent.ACTION_GET_CONTENT意图选择图库图像,然后在onActivityResult()中我获得了与Uri的意图。接下来我尝试执行以下操作:

Source source = Okio.source(getContentResolver().openInputStream(intent.getData()));
BufferedSink sink = Okio.buffer(Okio.sink(new File(outPath)));
long bytesWritten = sink.writeAll(source);

此处outPath是预先创建的现有0长度文件的有效路径。

复制操作完成且没有错误,bytesWritten返回实际字节,与源文件的大小相同。

但是当我这样做之后:

BitmapFactory.decodeFile(outFile);

返回null并生成skia: decoder returned false日志消息。这通常意味着文件格式错误。

为什么?我还试图在不使用Okio的情况下做同样的事情(只是编写了许多将InputStream复制到OutputStream的丑陋代码)并且结果是相同的。任何提示?

注意,以下工作,但它有一个缺点,我必须另外解码Bitmap。虽然我宁愿只将InputStream复制到文件中。

Bitmap b = BitmapFactory.decodeStream(getContentResolver().openInputStream(intent.getData()));
outStream = new FileOutputStream(outFile);
b.compress(Bitmap.CompressFormat.JPEG, 92, outStream);

0 个答案:

没有答案