我试图在画布上画文本,然后旋转画布,使文本倒转显示。然而,它仍然没有倒置显示。位图是颠倒显示的,但文本不是。
Canvas canvas = new Canvas(bm);
canvas.drawText(text, 0, bm.getHeight()/2, paint);
canvas.rotate(180, bm.getWidth()/2, bm.getHeight()/2);
发布于 2013-03-31 22:37:18
在转换画布时,实际上正在对变换矩阵执行更新,以便转换后续的绘图调用。举个例子,如果你想要“垫”你的画,你首先要翻译画布:
canvas.translate(10.0f, 0);
然后在(0,0)上画一个直角:
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);
另外,一定要理解Canvas
和Bitmap
之间的区别:前者是用于公开各种画图API的Android类,后者是图像中实际像素的数组(我记得在2.3之前,它是从本地库分配的,所以永远不要忘记调用Bitmap.recycle()
,否则很快就会得到OutOfMemoryException
的可用空间。
https://stackoverflow.com/questions/15735121
复制相似问题