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