4

SD カードからビットマップをスケーリングして電話のメモリに書き込もうとしています。その後、後でデコードして に追加しHashMapます。

問題は、パスが正しく、スケーリングされた画像が存在するにもかかわらず、ファイルが見つからないという例外が発生することです(確認しました)

これが節約部分です

        Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );         
        File imageRootPath = getFilesDir();
        File imageRoot = new File(imageRootPath, imagUri.getLastPathSegment()+".png");
        FileOutputStream out = new FileOutputStream(imageRoot);
        yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 90, out);

そして、これがファイルを読んだときの部分です

try {
Uri mainImgeUri = Uri.parse(imageRoot.toString());
File imageFile = new File(mainImgeUri.toString());
if(imageFile.exists()){
   System.out.println("it does");
}
InputStream imageStream = ListPropertiesBaseActivity.this.getContentResolver().openInputStream(mainImgeUri); // I am getting file not found error

Bitmap yourSelectedImage =BitmapFactory.decodeStream(imageStream);
hmBitmap.put(ID, yourSelectedImage);
imageStream.close();
} catch (Exception e) {

e.printStackTrace();
}

OpenInputStream内部電話メモリから読み取ることができない可能性がありますか? それとも、保存した結果の画像が良くないのでしょうか?

手動でファイルを参照して開くことで表示できましたが、

System.out.Println が実行されるので、ファイルが存在することを意味することに注意してください。

4

3 に答える 3

2

uri が実際に何であるかを確認するために、imageStream のロギングを試しましたか?

于 2013-02-27T17:24:05.750 に答える
1

見つけた。私はそれを回避する方法を見つけましたが、以前の動作とそれが機能しない理由を説明することはできませんでした。この getContentResolver を次のように置き換えました

FileInputStream fis = new FileInputStream(imageFile);
Bitmap yourSelectedImage =BitmapFactory.decodeStream(fis);

これはうまくいきました。理由は何でも!けれど

于 2013-02-27T17:54:27.233 に答える
1

Fileuriを使用してオブジェクトを作成し、mainImgeUriファイルが存在するかどうかを確認し、このファイルをopenInputStream()メソッドに渡す

于 2013-02-27T16:53:55.353 に答える