2011-10-14 90 views
3

我需要水平翻轉一個Bitmap。我試圖將其scaleX屬性設置爲-1.0,並且修改了Bitmap,使得我只能看到左側的一小部分(翻轉),而不是整個翻轉的Bitmap。其x財產仍然0。我用一個變換矩陣嘗試了同樣的事情,結果相同。水平翻轉一個位圖

我在做什麼錯?

回答

12

我發佈了一個簡單的函數來翻轉bitmapdata對象。 http://plasticsturgeon.com/2010/09/flipping-a-bitmapdata-image/

這裏是相關的代碼。

function flipBitmapData(original:BitmapData, axis:String = "x"):BitmapData 
{ 
    var flipped:BitmapData = new BitmapData(original.width, original.height, true, 0); 
    var matrix:Matrix 
    if(axis == "x"){ 
      matrix = new Matrix(-1, 0, 0, 1, original.width, 0); 
    } else { 
      matrix = new Matrix(1, 0, 0, -1, 0, original.height); 
    } 
    flipped.draw(original, matrix, null, null, null, true); 
    return flipped; 
} 

如果你想翻轉位圖圖像,你可以翻轉它的位圖屬性,像這樣:

myBitmap.bitmapData = flipBitmapData(myBitmap.bitmapData, "x"); 

您可以通過使用「Y」切換到垂直翻轉。

+0

如果可能,我寧願將「Bitmap」而不是「BitmapData」翻轉過來。 – rid

+0

那有什麼好處?一個翻轉的位圖將緩慢渲染,其變換數學將被顛倒,並且使用這種方法,翻蓋是完全可逆的。在你的情況下翻轉位圖有一些優點嗎? –

+0

哦 - 另外 - 您的位圖翻轉將圖像移動到左邊的原因是,所有位圖的註冊點在左上角。如果您翻轉位圖數據,您的註冊點仍然是左上角。 –