1

我有以下设置:使用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 的丑陋代码)并且结果是相同的。有什么提示吗?

请注意,以下方法有效,但它的缺点是我必须额外解码位图。虽然我宁愿将 InputStream 复制到文件中。

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

0 回答 0