2013-03-31 85 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。