私は次の設定をしています: ギャラリー画像はインテントを使用して選択され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);