2

I am trying to draw text on a canvas, and then rotate the canvas so the text is displayed upside down. However it still does not display upside down. The bitmap is displayed upside down but the text isn't.

Canvas canvas = new Canvas(bm);
    canvas.drawText(text, 0, bm.getHeight()/2, paint);
    canvas.rotate(180, bm.getWidth()/2, bm.getHeight()/2);
4

1 回答 1

3

当您变换画布时,实际上是在对变换矩阵执行更新,以便后续的绘画调用将被变换。举个例子,如果你想“填充”你的画,你首先翻译画布:

canvas.translate(10.0f, 0);

然后在 (0, 0) 上绘制一个 Rect:

canvas.drawRect(0, 0, 20, 10);

矩形将被绘制,其原点被转换为 (10, 0),这样就好像您调用了drawRect(10, 0),因为每个 2D 点都乘以当前变换矩阵。这同样适用于其他仿射变换,如旋转和缩放。因此,如果要绘制颠倒的文本,则必须先应用转换然后再进行绘画。

顺便说一句,要绘制文本实际上是颠倒的,您正在寻找的转换不是旋转,而是 Y 坐标的交换

canvas.scale(1, -1);
canvas.drawText(text, 0, bm.getHeight()/2, paint);

另外,一定要理解 aCanvas和 a之间的区别Bitmap:前者是用于公开各种绘画 API 的 Android API 类,后者是图像中实际像素的数组(我记得直到 2.3 它是从本地库,所以永远不要忘记调用Bitmap.recycle(),否则你很快就会用完可用空间并得到OutOfMemoryExceptions。

于 2013-03-31T22:37:18.377 回答