Android 将位图保存到文件

Android 将位图保存到文件,android,image,bitmap,save,Android,Image,Bitmap,Save,我尝试在android fingerpaint应用程序中实现撤销和重做功能。我已尝试使用以下代码实现 错误 第一个活动 public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case R.id.tools: ll.setVisibility(LinearLayout.VISIBLE); return true; case R.i

我尝试在android fingerpaint应用程序中实现撤销和重做功能。我已尝试使用以下代码实现

错误

第一个活动

public boolean onOptionsItemSelected(MenuItem item){
     switch (item.getItemId()) {
     case R.id.tools:
        ll.setVisibility(LinearLayout.VISIBLE);
        return true;
     case R.id.import_pics:
         getPhotos();
         return true;
     case R.id.save:
        toJPEGFile();
     return true;
     case R.id.trash:
         trash();

         return true;
     }
    return false;

}

private void toJPEGFile() {
    // TODO Auto-generated method stub
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images");    
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-"+ n +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
           FileOutputStream out = new FileOutputStream(file);
           finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out); // ERROR 341 LINE
           out.flush();
           out.close();

    } catch (Exception e) {
           e.printStackTrace();
    }
}
我不知道哪里错了。请帮帮我。 提前谢谢

       finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
正如你所指出的,这是错误的一行

finalBitmap
尚未初始化

又名,它不是位图,它是一个空值。确保首先将位图加载到此变量中

finalBitmap = .... // assign finalBitmap.
finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);  // Then save to file
编辑:

阅读您的评论,一种方法是在
onDraw
方法中执行以下操作:

  canvas.drawBitmap(bitmap, 0, 0, paint);
  finalBitmap = bitmap;

不过,我也不知道你们是从哪里得到位图的。这是另一个全局变量吗?也许你可以把finalBitmap.compress…改成位图。compress…

我想你的finalBitmap肯定是空的…finalBitmap是341行,但我不知道怎么可以为空对不起,我在这里是begginer。/***受保护的void onDraw(画布){paint.setPathEffect(空);if(位图!=空){canvas.drawBitmap(位图,0,0,paint);for(MyCircle circle:circleList){//draw circles myCanvas.drawCircle(getCircleMidPointX(circle.firstX,circle.lastX),getCircleMidPointY(circle.firstY,circle.lastY),circle.radius,myPaint);}}****/这是我在画布上的位图。我如何分配它?@user2212477查看编辑。仍然不确定位图来自何处。
位图
也可能为空。值得一试,如果您在
onCreate
或其他内容中初始化了它。我可以上传或下载代码以查看我的问题到底出在哪里吗?@user2212477我没有明天之前都可以使用android手机。但是你可以发送主java文件,我可以快速阅读。使用或其他什么。这里有CanvasView.java和FirstActivity.java
  canvas.drawBitmap(bitmap, 0, 0, paint);
  finalBitmap = bitmap;