2012-08-07 122 views
0

如何反轉繪製到畫布中的圖像?在畫布上反轉繪製位圖

我有以下幾點:

 canvas.save(); 
     canvas.drawBitmap(image.current(), null, currentBounds(), Paints.BLANK); 
     canvas.restore(); 

我怎樣才能讓現在的影像drawed fliped X軸進currentBounds()?

我已經找到了一些答案,表明Matrix的用法,但我不知道是否有更簡單的方法?這樣的油漆打開了一些標誌。

編輯:

以下是我嘗試用矩陣變換:

Rect currentBounds = currentBounds(); 


    currentBounds.offset((int)offset.x(), (int)offset.y()); 

    float scale = image.current().getWidth()/currentBounds.width(); 

    Matrix matrix = new Matrix(); 
    matrix.setScale(- scale - 1, scale + 1); 
    matrix.postTranslate(currentBounds.left, currentBounds.top); 

    canvas.drawBitmap(image.current(), matrix, Paints.BLANK); 
    canvas.drawRect(currentBounds, Paints.STROKE_BLUE); 

以下是這場平局的結果:

https://dl.dropbox.com/u/28683814/game.png

可以看出,精靈被從0,0拖到左邊,並沒有完全完成currentBounds(),我做錯了什麼?

+2

我認爲[這](HTTP:/ /stackoverflow.com/a/7775153/314784)是最好的方法。它使用矩陣,但並不那麼難。 – 2012-08-07 19:33:28

+0

使用矩陣應該是直截了當的。 – Doomsknight 2012-08-07 19:34:07

+0

可能是最好的方法,請閱讀我編輯的答案,看看新的錯誤 – 2012-08-07 23:27:54

回答

0

好吧,我解決了這個辦法:

Rect currentBounds = currentBounds(); 
    currentBounds.offset((int)offset.x(), (int)offset.y()); 

    float scale = (float) currentBounds.width()/(float) image.current().getWidth(); 

    boolean leftMovement = movingLeft(); 

    Matrix matrix = new Matrix(); 
    matrix.setScale(leftMovement ? -scale : scale, scale); 
    matrix.postTranslate(leftMovement ? currentBounds.right : currentBounds.left, currentBounds.top); 

    canvas.drawBitmap(image.current(), matrix, Paints.BLANK); 

但這種 「leftMovement currentBounds.right:currentBounds.left」 不期待權

0

使用

canvas.scale(-1,0,width/2,height/2); 

,通過我自己的答案here提及。

雖然,我會指出它需要大約一分鐘的時間來理解矩陣,它會讓你成爲更好的Android程序員。

+0

其實,這使得我的畫消失我明白矩陣,我只是想知道我會怎麼做在遊戲中應用的比例(邊界不是原始的位圖大小),但也可以對矩陣進行處理。我會試一試。 – 2012-08-07 19:50:52

0

使用此。我認爲這很容易。

 canvas.save(); 
     canvas.rotate(180, x, y); 
     canvas.drawBitmap(bitmap, x, y, null); 
     canvas.restore(); 
+0

這個旋轉,我需要翻轉當前矩陣 – 2012-08-07 20:01:05