2013-06-28 57 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