Android - Canvas - 从文件加载图像,修改它并将完整的结果保存到文件中

时间:2014-07-25 11:19:33

标签: android android-canvas

在输入画布后,我想从文件中加载图像。 然后我想修改它,最后将它存储到同一个文件中。

通过按钮将图像加载(或更新)到myBitMap中。

方法1:不起作用。

protected void onDraw(Canvas canvas) {
    if( myBitMap != null) { 
        // I added an image to it via a button
        canvas = new Canvas( myBitMap.copy(Bitmap.Config.ARGB_8888, true));
        myBitMap = null; 
    }
    // rest of the drawing code

方法2:确实有效...但需要重新绘制我加载的图像和新更改的内容。因此,在每次更改(onTouch ...)时,我需要重绘两个图像。

protected void onDraw(Canvas canvas) {
    if( myBitMap != null) canvas.drawBitmap( myBitMap, 0, 0, null); 
    // rest of the drawing code

为什么会这样?

有没有办法将加载的图像放入画布使用的位图中?然后有一个完整的位图,用onTouchEvents更改。

1 个答案:

答案 0 :(得分:0)

选项1:在加载的位图上绘制并将整体绘制到View的画布上。

  • 从文件加载位图。
  • 在View的画布上绘制该位图,例如canvas.DrawBitmap(bitmap,0,0,null);
  • 新的(交互式)绘图也可以直接在画布上完成。
  • 通过阅读DrawingCache来保存整个内容。

缺点是如果使用滚动,视口外的任何内容都会被剪裁。标准绘图缓存的大小有限。

选项2:在位图上绘制并最终在View的画布上绘制。

  • 从文件加载位图,例如loadedBitmap。
  • Canvas myCanvas = new Canvas(loadedBitmap);
  • myCanvas.drawRect(....);
  • 更多绘画动作,最后......
  • canvas.drawBitmap(loadedBitmap);
  • 这个loadedBitmap当然可以很容易地写入文件(例如PNG)。

位图应该是可变的(imMutable = true)。

选项3:使用您自己的大小创建自己的cachedBitmap

这与选项2类似,但您可以使用特定大小定义位图。您可以从将loadedBitmap复制到新的位图等开始。