【问题标题】:How to draw on Bitmap in android?如何在android中绘制位图?
【发布时间】:2011-05-08 18:59:28
【问题描述】:

我正在尝试弄清楚如何在 android 中绘制位图,并保留这些更改的位图的副本以用于撤消功能。

Bitmap b = ...
Paint p = new Paint();
canvas.drawBitmap(b, new Matrix(), null);
canvas.drawCircle(0,0,20,20);
//does Bitmap b have the circle drawn on it next time?

或者如何在画布上绘制位图后获取位图(我想保留一堆位图,其中包含画布绘制所应用的更改)?也许我完全错了。

【问题讨论】:

    标签: android canvas bitmap


    【解决方案1】:

    使用new Canvas(Bitmap bitmap)Canvas 提供Bitmap,其中将包含绘图操作的结果。

    您在Canvas 上使用drawBitmap 绘制的原始Bitmap 将永远不会被修改。

    在用户完成每个操作后,您可能会:

    • 在内存中保存已完成操作的列表
    • 使用 Bitmap.compress 将中间结果保存到外部存储

    另一种方法是使用LayerDrawable 将连续的绘图操作堆叠在一起。您可以想象允许用户禁用已完成的每个单独操作。

    【讨论】:

    • 现在只是根据用户触摸事件绘制一堆圆圈,但随着更多圆圈被绘制并保存在内存中,它的速度会大大降低。这就是为什么我们希望通过将更改应用于位图来“保存”用户输入/操作,这样每次只绘制一个位图,而不是保存和绘制数千个圆圈。
    • 因此您可以在目标位图上使用 Bitmap.copy(...) 并使用 Canvas.setBitmap() 为画布提供生成的位图作为新的绘图目标
    【解决方案2】:

    您可以在此处查看如何绘制文本的完整指南:

    https://www.skoumal.net/en/android-how-draw-text-bitmap/

    长话短说:

    复制您的位图以使其可变并基于它创建 Canvas。

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多