2013-10-23 76 views
1

我正在用自定義相機設備編寫應用程序。在我的自定義相機捕獲後,我將捕獲的圖像繪製到畫布上,並提供對捕獲的imgae的免費手繪,然後保存選項。在保存時我將它保存爲兩個圖像,這意味着一個包含免費手繪和另一個不包含繪圖的圖像。通過寫入輸出流和壓縮位圖來完成保存。在兩個單獨的異步任務中完成位圖的保存和壓縮。問題是我可以捕捉圖像高達16或17倍,但在捕獲和編輯後,然後按保存按鈕,我得到異常「vm中止致命信號11(SIGSEGV)在0xdeadd00d(代碼= 1)」。 異步任務一位圖壓縮和保存異步任務期間的問題

public class SaveOriginalImage extends AsyncTask<String, Void, String> { 
    OutputStream dataOutputStream; 
    Bitmap bitMapOriginalImage; 
    String fileName; 
    Activity activityContext; 
    ProgressDialog progressDialog; 
    String sbCaption; 
    String fileType; 

    public SaveOriginalImage(Bitmap bitMap, String filePath, 
      Activity currentActivity, String fileCaption) { 
     this.bitMapOriginalImage = bitMap; 
     this.fileName = filePath; 
     this.activityContext = currentActivity; 
     this.sbCaption = fileCaption; 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     try { 
      dataOutputStream = new FileOutputStream(fileName); 

      bitMapOriginalImage 
        .compress(CompressFormat.PNG, 100, dataOutputStream); 
      Collection.lastImageFilePath = fileName; 

      dataOutputStream.flush(); 
      dataOutputStream.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPreExecute() { 

     super.onPreExecute(); 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (bitMapOriginalImage != null) { 
      bitMapOriginalImage.recycle(); 
      bitMapOriginalImage = null; 
     } 
    } 
} 

異步任務2

public class SaveFreeHandImage extends AsyncTask<String, Void, String> { 
OutputStream dataOutputStream; 
Bitmap bitMapToSave; 
String fileName; 
Activity activityContext; 
ProgressDialog progressDialog; 
String sbCaption; 
String className; 
String fileType; 

public SaveFreeHandImage(Bitmap bitMap, String filePath, 
     Activity currentActivity, String fileCaption, String className) { 
    this.bitMapToSave = bitMap; 
    this.fileName = filePath; 
    this.activityContext = currentActivity; 
    this.sbCaption = fileCaption; 
    this.className = className; 
} 

@Override 
protected String doInBackground(String... params) { 
    try { 

     dataOutputStream = new FileOutputStream(fileName); 

     bitMapToSave.compress(CompressFormat.PNG, 100, dataOutputStream); 
     Collection.lastImageFilePath = fileName; 
     try { 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 

      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    // super.onPostExecute(result); 
    progressDialog.dismiss(); 

    HomeFinal.showCustomToast("Drawing saved to SD card ", 0, 0, 
      activityContext); 
    Collection.isNewImageAdded = false; 
    DrawingView.colorD = Color.parseColor("#000000"); 
    if (DrawingView.paths != null) { 
     if (DrawingView.paths.size() >= 1) { 
      DrawingView.paths.clear(); 
     } 
    } 

    if (bitMapToSave != null) { 
     if (!bitMapToSave.isRecycled()) { 
      bitMapToSave.recycle(); 
      bitMapToSave = null; 
     } 
    } 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    progressDialog = ProgressDialog.show(activityContext, "", "Saving.."); 
    } 
} 

我測試對聯想一個-300H 7英寸的平板。請給我解決方案。提前致謝。

回答

3

我解決了我自己。這是因爲位圖的過度使用,處理位圖後,它完美地工作。