如何在拍照后从ImageView保存图像

时间:2011-11-30 01:32:40

标签: android camera image savestate

我从画廊中挑选照片或者用相机拍照。 如果我将图片放入我的imageView,然后单击确认按钮,我该如何保存该图片? 我必须使用saveState()吗? 请发表一些评论。 感谢。

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);
     if (resultCode != RESULT_OK) return;
       switch (requestCode)
       {
        case PICK_FROM_CAMERA:
        Bitmap selectedImage = (Bitmap) data.getExtras().get("data");
        selectedImage = Bitmap.createScaledBitmap(selectedImage, 80, 80, false);
        mImageView.setImageBitmap(selectedImage); 
        break;

        case PICK_FROM_GALLERY:
            Uri selectedImageUri = data.getData();
            selectedImagePath = getPath(selectedImageUri);
            System.out.println("Image Path : " + selectedImagePath);
            mImageView.setImageURI(selectedImageUri);
        break;
       }
}

private void saveState() 
{
    String name = (String) nameEdit.getText().toString();
    String category = (String) categoryEdit.getText().toString();
    String expired_date = (String) expired_Date_Btn.getText().toString();
    ImageView image = (ImageView) mImageView.setImageURI(); //how to edit?
    if(mRowId == null)
    {
        long id = mDbHelper.insertItem(category, name, expired_date);
        if(id>0)
        {
            mRowId = id;
        }           
    }
    else 
    {
        mDbHelper.updateItem(mRowId, category, name, expired_date);
    }
}

//How can I save image after clicking button?
confirmButton.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View v){
       setResult(RESULT_OK);
       finish();
     }
}); 

2 个答案:

答案 0 :(得分:3)

您可以按照以下步骤保存所有View(不仅仅是ImageView)的图像:

1.获取视图的位图:

public Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
            Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.draw(c);
    v.invalidate();
    return b;
}

2.将其保存在您的SD卡文件中(或任何您想要的地方):

protected String saveBitmap(Bitmap bm, String name) throws Exception {
    String tempFilePath = Environment.getExternalStorageDirectory() + "/"
            + getPackageName() + "/" + name + ".jpg";
    File tempFile = new File(tempFilePath);
    if (!tempFile.exists()) {
        if (!tempFile.getParentFile().exists()) {
            tempFile.getParentFile().mkdirs();
        }
    }

    tempFile.delete();
    tempFile.createNewFile();

    int quality = 100;
    FileOutputStream fileOutputStream = new FileOutputStream(tempFile);

    BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
    bm.compress(CompressFormat.JPEG, quality, bos);

    bos.flush();
    bos.close();

    bm.recycle();

    return tempFilePath;
}


这些代码来自我的一个项目,但我认为它们易于理解和重复使用。希望它会对你有所帮助。

答案 1 :(得分:2)

我不确定如何从图库中执行此操作或为什么要这样做,因为如果图像位于图库中,则图像已保存到手机中。您应该能够使用文件的URI重新编写文件。 如果您使用相机拍摄图像,则可以看到图像的位图。使用以下代码片段保存它应该相对容易:

outStream = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();

您需要权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

有关详细信息,请尝试按照此示例(我找到代码段的位置)。他们正在上传他们的图片,但应该适用相同的概念。 http://android-er.blogspot.com/2010/07/save-file-to-sd-card.html

希望这有帮助!