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