我有以下设置:使用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);