2013-03-31 83 views
2

我试图在画布上绘制文本,然后旋转画布以使文本上下颠倒显示。但是它仍然不会显示颠倒。位图颠倒显示,但文本不是。在Canvas中无法绘制文本

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

http://stackoverflow.com/questions/3167928/drawing-rotated-text-on-a-html5-canvas可能有帮助。 –

+0

先旋转画布,然后在旋转的画布上绘制文字。 – Luis

+0

@Leco随着旋转[你仍然没有得到](http://jsfiddle.net/4dQ9V/)颠倒的文字。看到我的回答如下 – Raffaele

回答

3

当你变换一个画布,你实际上是在transformation matrix进行更新,以便后续调用画将被改造。举个例子,如果你想“垫”你的画,你先翻译画布:

canvas.translate(10.0f, 0); 

,然后上绘制一个矩形(0,0):

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

矩形会绘制时将其原点转换为(10,0),这样就可以调用drawRect(10, 0),因为每个二维点都乘以当前转换矩阵。其他affine transformations同样适用,如旋转和缩放。所以如果你想绘制颠倒的文字,你必须先应用变形第一个,然后绘画。

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

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

此外,一定要了解CanvasBitmap之间的区别:前者是用于公开各种绘画API的Android API类,后者是图像中实际像素的数组(如我记得直到2.3它从本地库中分配,所以永远不要忘记打电话给Bitmap.recycle(),否则你很快就会结束可用空间d获得OutOfMemoryException s。