2013-06-28 60 views
1

我正在以編程方式使用用戶輸入的數據繪製到畫布。一旦輸入了所有數據,用戶就可以瀏覽圖像,並將它們繪製到畫布上。用戶可以選擇保存所有圖像(可能有幾百個)。我使用在UI線程上運行的runnable,它將繪製並保存每個圖像(因爲您無法從AsyncTask繪製到畫布)。這有效,但我遇到的問題是如果在進行保存時,用戶關閉屏幕或最小化應用程序。這導致jpegs只是黑色。我希望儲蓄是可以在後臺運行並仍然有效的東西。當畫布不可見時將畫布保存爲jpeg

代碼用於繪製到畫布上,並保存圖像:

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    Bitmap bitmap; 
    bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    canvas.setBitmap(bitmap); 

    // draw everything here 

    OutputStream stream = new FileOutputStream(imageName + ".jpg"); 
    bitmap.compress(CompressFormat.JPEG, 100, stream); 
    stream.close(); 
} 

那麼,有沒有對圖像的方式來繪製,並同時在畫布上是不可見的保存到文件中的背景是什麼?任何幫助,將不勝感激!

回答

-1
I think you can use this: 

signLayout.setDrawingCacheEnabled(true); //signLayout is layout that contains image you want to save 
    // Save image from layout 
    String path = "sdcard0/test/test.jpg"; //file path you want to save 
    gestureSign.save(signLayout, path); 

保存方法

//Save to path 
public void save(View v, String SavePath) 
{ 
    if(mBitmap == null) 
    { 
     mBitmap = Bitmap.createBitmap (layoutSign.getWidth(), layoutSign.getHeight(), Bitmap.Config.RGB_565);; 
    } 
    Canvas canvas = new Canvas(mBitmap); 
    try 
    { 
     FileOutputStream mFileOutStream = new FileOutputStream(SavePath); 
     v.draw(canvas); //Lay toan bo layout 
     mBitmap.compress(Bitmap.CompressFormat.PNG, 100, mFileOutStream); 
     mFileOutStream.flush(); 
     mFileOutStream.close(); 
    } 
    catch(Exception e) 
    { 
     Log.v("log_tag", e.toString()); 
    } 
} 
+1

什麼是'gestureSign'(我知道這是一個錯字,但初學者不會)。你還應該添加一些解釋。只是複製和粘貼一些代碼不是答案。 – Simon

+0

即使這沒有太多的解釋,它工作正常,並幫助解決了我的問題。我從我的onDraw方法中刪除了保存代碼,並將所有內容都移動到了我的Runnable的運行方法中。我現在可以在後臺繪製並保存所有圖像。謝謝! – Mark