1

我已经制作了一个带有 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 的内容?(而不是位图格式,然后是其他东西)

4

3 回答 3

1

试试这个代码,让我知道会发生什么..

//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);

}
于 2012-06-18T09:48:22.030 回答
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
                }
            }

        }
    }
于 2012-06-18T09:57:11.297 回答
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();
   }
于 2015-03-29T19:16:21.880 回答