Android将Canvas保存到SD

时间:2011-08-16 21:03:44

标签: android android-canvas

我使用colorfilter

在画布上创建了图像

这是我的代码

     int color = mPaint.getColor();
     f = new LightingColorFilter(color, 1);
     mPaint.setColorFilter(f);


     myBmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon10);
     canvas.drawBitmap(myBmp, 20, 20, mPaint);
     canvas.save();
     canvas.restore();`

然后,我想将其保存到sdcard

            OutputStream outStream = null;
            File file = new File(extStorageDirectory, "er.PNG");
            try {
            outStream = new FileOutputStream(file);
            myBmp.compress(Bitmap.CompressFormat.PNG, 85, outStream);
            outStream.flush();
            outStream.close();

            Toast.makeText(Draw.this, "Saved", Toast.LENGTH_LONG).show();

           } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(Draw.this, e.toString(), Toast.LENGTH_LONG).show();
           } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Toast.makeText(Draw.this, e.toString(), Toast.LENGTH_LONG).show();
           }

这是工作但有问题,我在SD上的图片是旧图片(不是过滤器)

我能解决这个问题吗?谢谢

1 个答案:

答案 0 :(得分:1)

您需要绘制到位图中。请尝试以下:

 int color = mPaint.getColor();
 f = new LightingColorFilter(color, 1);
 mPaint.setColorFilter(f);
 Bitmap outBitmap = Bitmap.Create(myBmp.getWidth(),myBmp.getHeight(),Bitmap.Config.ARGB_8888);
 Canvas canvas = new Canvas(outBitmap);
 canvas.drawBitmap(myBmp,20,20,mPaint);

而且你可以“保存”(outBitmap)到SD卡。 如果您使用BitmapFactory打开Bitmap,您将获得不可变位图,并且无法在其上绘制。 这就是你需要创造临时的原因。位图,连接Canvas进行绘制,绘图并可以保存。