我正在尝试在画布上绘制文本,然后旋转画布以使文本上下颠倒显示。但它仍然没有显示颠倒。位图显示为倒置但文本不是。
Canvas canvas = new Canvas(bm);
canvas.drawText(text, 0, bm.getHeight()/2, paint);
canvas.rotate(180, bm.getWidth()/2, bm.getHeight()/2);
答案 0 :(得分:3)
转换画布时,实际上是在transformation matrix上执行更新,以便后续的绘制调用将被转换。例如,如果要“填充”您的绘画,首先要翻译画布:
canvas.translate(10.0f, 0);
然后在(0,0)上绘制一个Rect:
canvas.drawRect(0, 0, 20, 10);
矩形将绘制,其原点转换为(10,0),因此它就像你调用drawRect(10, 0)
一样,因为每个2D点都乘以当前的变换矩阵。这同样适用于其他affine transformations,例如旋转和缩放。因此,如果您想要绘制颠倒的文字,您必须应用转换第一个,然后然后绘画。
顺便说一下,要实际颠倒绘制文本,您要查找的转换不是 rotation ,而是Y坐标的 swap :
canvas.scale(1, -1);
canvas.drawText(text, 0, bm.getHeight()/2, paint);
另外,请务必了解Canvas
和Bitmap
之间的区别:前者是用于公开各种绘图API的Android API类,后者是实际像素的数组在图像中(我记得直到2.3它是从本地库中分配的,所以永远不要忘记拨打Bitmap.recycle()
,否则你很快就会占用可用空间并获得OutOfMemoryException
。