2012-05-28 70 views
0

我正在研究一個應用程序,該應用程序將繪製的畫布存儲爲SD卡中的jpeg圖像。 的問題是,當我試圖查看保存的圖像,它加載了很多的時間比我要在正常時間像其他圖像查看保存的圖像外的圖像 我保存的圖像代碼:保存jpeg以後查看

  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(); 
      } 
       } 

在此先感謝請幫助我!

+0

你是什麼意思它加載了很多的時間比其他圖像? –

+0

在Android移動設備上拍攝的照片設備在正常時間播放,但由應用創建的圖像需要花很長時間才能查看圖庫中的圖像不知道爲什麼 –

+0

確認了您的圖像文件大小?也許它太大了加載 –

回答

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(); 
       } 
0

您的代碼會將圖像保存爲PNG文件(即使您將文件擴展名爲.jpg)。 PNG文件是無損的,因此比JPEG文件大得多。

要修復它,將它保存爲JPEG:

ostream = new FileOutputStream(file); 
bitmap.compress(CompressFormat.JPEG, 50, ostream); 
+0

對不起,不工作它也需要很長時間來查看SD卡中保存的圖像 –

+0

@ThiruVT:你能給我們一些數字。保存的圖像有多大,其他圖像有多大(以SD上的KB/MB以及寬度和高度而言)?您的圖片需要多長時間才能加載,其他圖片需要多長時間才能加載? – Codo

+0

即使其大小僅爲5 kb,圖像大小也不大,僅此圖像需要15秒至20秒才能加載正常圖像僅需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,就是你在烏爾drawView函數類使用了這樣的Gloabal變量給出使用此ü必須跳過此行menas評論此行

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

可能它的工作原理

+0

它正在工作,而不是採取更多 時間比正常 –

相關問題