如何将ImageView的内容保存到Android中的位图?

时间:2012-06-18 09:43:23

标签: android bitmap save android-imageview

我使用ImageView创建了一个应用程序,该应用程序显示了用户绘制的位图,一切顺利,但现在我想让用户将图像从ImageView保存到jpeg文件我点击一个按钮。 我怎么能这样做?

这是我的代码:

    ImageView imageview;

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageview=(ImageView)findViewById(R.id.imageviewcomponent);
        imageview.setDrawingCacheEnabled(true);
    }

    //This method sets the Bitmap into the ImageView from the ActivityResult of the Drawing Activity
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == get_code && resultCode == RESULT_OK)
    {
        iv.setImageBitmap((Bitmap) data.getParcelableExtra("Painting"));
        }
    }

    //This is the onClick method of the button for saving the image
    public void SaveAsImage(View btsave) throws FileNotFoundException {
        Bitmap b=Bitmap.createBitmap(imageview.getWidth(), imageview.getHeight(),        Bitmap.Config.ARGB_8888);
        OutputStream fOut = null;
        new File("/sdcard/signatures").mkdir();
        fOut = new FileOutputStream("/sdcard/myPaintings/image.jpg");
        b.compress(CompressFormat.JPEG, 95, fOut);
    }

用于创建文件夹和保存图像的代码正常工作,因为我可以在myPainting文件夹中找到image.jpg文件,但图像的内容完全是黑色的,没有用户绘制的图像。 如何获取ImageView的内容? (而不是Bitmap格式,然后是其他东西)

3 个答案:

答案 0 :(得分:0)

试试这段代码,让我知道发生了什么......

//This is the onClick method of the button for saving the image
    public void SaveAsImage(View btsave) throws FileNotFoundException {

        Bitmap b = Bitmap.createBitmap(imageview.getWidth(), imageview.getHeight(),        Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(b);
        imageview.draw(canvas);
        OutputStream fOut = null;
        new File("/sdcard/signatures").mkdir();
        fOut = new FileOutputStream("/sdcard/myPaintings/image.jpg");
        b.compress(CompressFormat.JPEG, 95, fOut);

}

答案 1 :(得分:0)

稍微修改后的user370305代码也应该可以使用

static void saveDrawable(ImageView imageView) throws FileNotFoundException{
        Drawable drawable = imageView.getDrawable();
        Rect bounds = drawable.getBounds();
        Bitmap bitmap = Bitmap.createBitmap(bounds.width(),bounds.height(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.draw(canvas);
        OutputStream fOut = null;
        try {
            new File("/sdcard/signatures").mkdir();
            fOut = new FileOutputStream("/sdcard/myPaintings/image.jpg");
            bitmap.compress(Bitmap.CompressFormat.JPEG, 95, fOut);
        } finally {
            if ( fOut != null ){
                try {
                    fOut.close();
                } catch (IOException e) {
                    //report error
                }
            }

        }
    }

答案 2 :(得分:0)

Imageview内部使用 ScaleType 。 它会根据屏幕的像素缩放图像,如果你想获得图像的原始质量,可以使用图纸缓存,

  public void SaveAsImage(Holder imageview) throws FileNotFoundException {

    View view=findViewById(R.id.holder_frame);
    Bitmap bmp=viewToBitmap(imageview);
    imageview.setDrawingCacheEnabled(true);
    imageview.buildDrawingCache(true);


   Bitmap bitmap1=imageview.getDrawingCache();
    OutputStream fOut = null;

    new File("/sdcard/Pic").mkdir();
    fOut = new FileOutputStream("/sdcard/Pic/image4.jpg");
    bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, fOut);

    imageview.setDrawingCacheEnabled(false);
    imageview.destroyDrawingCache();
   }
相关问题