1

JPG 画像を SD カードに保存して、縮小して ImageView に表示しようとしました (元のサイズが原因でメモリ不足エラーが発生したため)。

ファイルを保存するために使用する方法は次のとおりです。

public void saveImage(String src) throws IOException{
        URL url = new URL (src); 
        InputStream input = url.openStream(); 
        try {     
            File storagePath = Environment.getExternalStorageDirectory();
            OutputStream output = new FileOutputStream (new File(storagePath, "myImage.jpg"));     
            try {         
                byte[] buffer = new byte[1024];         
                int bytesRead = 0;         
                while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
                        output.write(buffer, 0, bytesRead);         
                }     
            }  
            finally {         
                output.close();     
            } 
        } 

        finally {     
            input.close(); 
        }
    }

次に、そのメソッドを呼び出して、縮小された画像をメモリにロードして ImageView に配置しようとすると、次のようになります。

try {
            saveImage(src);
        } catch (IOException e) {
            e.printStackTrace();
        }

        BitmapFactory.Options options = new BitmapFactory.Options();

        options.inSampleSize = 20;



        File storagePath = Environment.getExternalStorageDirectory();
        File file = new File(storagePath, "myImage.jpg");

        Bitmap scaledDownImage = BitmapFactory.decodeFile(file.getAbsolutePath(), options);


        imageFrame1.setImageBitmap(scaledDownImage);

ただし、これを実行しようとすると、次のような LogCat メッセージが表示されます。

「java.io.FileNotFoundException: /mnt/sdcard/myImage.jpg: オープンに失敗しました: EACCES (許可が拒否されました)」

私も追加することを確認しました

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

マニフェストに。

誰にもアイデアはありますか?

編集: エラーは 107 行目と 72 行目で発生します。これは、画像を保存しようとしたときに発生することを意味します。

バンプ: 誰か?いくつかの提案を本当に感謝します。

4

2 に答える 2

0

問題が解決しました!変更する必要があったのは、saveImage メソッドのバイト バッファーのサイズだけでした。1024 でしたが、8192 に上げた後は正常に動作しています!

みんなの提案に感謝します。

于 2012-12-09T10:48:49.853 に答える
-1

以下を使用します。

String  path = Environment.getExternalStorageDirectory()
                                .toString() + File.separator + "myImage.jpg";
OutputStream output = new FileOutputStream (path,true);
于 2012-12-08T21:49:22.107 に答える