【问题标题】:How to paint on Image and save that image in to Android?如何在图像上绘画并将该图像保存到 Android 中?
【发布时间】:2011-12-24 06:39:29
【问题描述】:

我是画布的新手。我想使用我已经保存的图像并希望在该图像上进行一些绘画。之后我想保存它。

我知道使用 Canvas 是可能的。我可以在图像上进行绘画,但是当我要存储该图像时,它只保存了绘画。不是带有绘画的图像。

那么有朋友可以告诉我如何在图像上绘画并保存该图像的代码吗?

谢谢。

这是我用来在 SurfaceView 上绘制的代码。 源代码:

    @Override
        public void run() {
            //Canvas canvas = null;
            while (_run){

                try{
                    canvas = mSurfaceHolder.lockCanvas(null);
                    if(mBitmap == null){
                        mBitmap =  Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);
                    }

                    final Canvas c = new Canvas (mBitmap);
                    //canvas.drawColor(0, PorterDuff.Mode.CLEAR);
                    c.drawColor(0, PorterDuff.Mode.CLEAR);
                    canvas.drawColor(Color.WHITE); 
//                  Bitmap kangoo = BitmapFactory.decodeResource(getResources(),R.drawable.icon);

//                    if(!(DrawingActivity.imagePath==null)){
//                      canvas.drawBitmap(DrawingActivity.mBitmap, 0, 0, null);
//                    }
                    commandManager.executeAll(c);
                    canvas.drawBitmap (mBitmap, 0,  0,null);
                } finally {

                    mSurfaceHolder.unlockCanvasAndPost(canvas);
                }
            }

        }

我正在使用 mBitmap 将位图保存到 SDCard。

【问题讨论】:

    标签: android android-layout canvas android-emulator android-widget


    【解决方案1】:

    您的问题是您在整个画布上一遍又一遍地绘图:

     final Canvas c = new Canvas (mBitmap); // creates a new canvas with your image is painted background
     c.drawColor(0, PorterDuff.Mode.CLEAR); // this makes your whole Canvas transparent
     canvas.drawColor(Color.WHITE);  // this makes it all white on another canvas
     canvas.drawBitmap (mBitmap, 0,  0,null); // this draws your bitmap on another canvas
    

    使用逻辑大致如下:

    @Override
    public void run() {
    
    Canvas c = new Canvas(mBitmap);
    
    
    /* Paint your things here, example: c.drawLine()... Beware c.drawColor will fill your canvas, so your bitmap will be cleared!!!*/
    ...
    
    /* Now mBitmap will have both the original image & your painting */
    String path = Environment.getExternalStorageDirectory().toString(); // this is the sd card
    OutputStream fOut = null;
    File file = new File(path, "MyImage.jpg");
    fOut = new FileOutputStream(file);
    mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    fOut.flush();
    fOut.close();
    }
    

    别忘了添加必要的权限来保存您的文件:

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

    在清单文件中的 &lt;application&gt;&lt;/application&gt; 之外。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 2023-03-23
      • 2012-01-23
      相关资源
      最近更新 更多