0

描画したキャンバスを jpeg 画像として SD カードに保存するアプリケーションに取り組んでいます。問題は、保存された画像を表示しようとしたときに、他の画像よりも多くの時間ロードされていることです。保存された画像を他の画像と同じように通常の時間に表示したい画像を保存するための私のコードは次のとおりです。

            View content = drawView;
            content.setDrawingCacheEnabled(true);
            content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
            Bitmap bitmap = content.getDrawingCache();

            String path = Environment.getExternalStorageDirectory().getAbsolutePath();
            String file_name="Imatge"+System.currentTimeMillis()+".jpg";
            File file = new File(path,file_name);
            FileOutputStream ostream;
            try {                   
                ostream = new FileOutputStream(file);
                bitmap.compress(CompressFormat.PNG,50, ostream);
                ostream.flush();
                ostream.close();
                Toast.makeText(getApplicationContext(), " :) Image saved in "+ path+"/"+file_name, 5000).show();
            } catch (Exception e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), e.toString()+"error", 5000).show();
            }
                }

よろしくお願いします!

4

3 に答える 3

0

以下のように使用してください

        String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
                     FileOutputStream out = null;
                     Log.e("h",""+mview.getMeasuredHeight()+" "+mview.getMeasuredWidth());
                    try {
                         out = new FileOutputStream(new File(extStorageDirectory + "/myAwesomeDrawing.jpg"));
                         mBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); 
                         out.flush(); 
                         out.close();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }  

ここで、mBitmapは、uがur Drawviewクラスで使用したGloabal変数であるため、これを使用することにより、この行をスキップする必要があります。この行のmenasコメント

  /*View content = drawView;
     content.setDrawingCacheEnabled(true);
        content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW);
        Bitmap bitmap = content.getDrawingCache();
*/

それがうまくいくかもしれません

于 2012-05-28T11:13:44.263 に答える
0

私自身が解決策を見つけました。解決策は、メディアストアを介して画像を保存することです。ここに、正しく機能している私のコードがあります

View content = drawView;
                content.setDrawingCacheEnabled(true);
                content.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_AUTO);
                Bitmap bitmap;
                bitmap = content.getDrawingCache();             
                String file_name="MyImage"+System.currentTimeMillis()+".jpg";

                ContentValues values = new ContentValues();
                values.put(Images.Media.TITLE,"MyImage");                   
                values.put(Images.Media.DESCRIPTION,"Advanced Practice");                   
                values.put(Images.Media.MIME_TYPE, "image/jpeg");
                Uri url = null;

                try 
                {   
                    url = getContentResolver().insert(MediaStore.Images.Thumbnails.getContentUri("external"), values);
                    MediaStore.Images.Media.insertImage(getContentResolver(), bitmap,"MyImage","Advanced Practice");                     
                    Toast.makeText(getApplicationContext(), " :) Image saved in /sdcard/DCIM/Camera/"+file_name, 5000).show();
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), e.toString()+"error", 5000).show();
                }
于 2012-06-05T10:22:38.030 に答える
0

このコードは、イメージを PNG ファイルとして保存します (ファイル拡張子は .jpg ですが)。PNG ファイルはロスレスであるため、JPEG ファイルよりもはるかにサイズが大きくなります。

これを修正するには、JPEG として保存します。

ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 50, ostream);
于 2012-05-28T05:49:13.247 に答える