2012-09-20 150 views
0

我有背景圖像和較小的圖像。我使用像這樣的副本將較小的圖像複製到較大的圖像:使用pixelbender旋轉圖像

destBitMap.copyPixels(img, new Rectangle(0, 0, img.width, img.height), 
    location); 

現在我想在複製它之前旋轉圖像。最好的辦法是做什麼? 我嘗試過使用Matrix和bitmapData.draw(),但它不可接受。它有像素化的邊緣。

我發現這個pixelbender過濾器:http://life.neophi.com/danielr/2009/07/image_rotation_with_pixel_bend.html 旋轉圖像。從好的一面來看,它確實很快。我從來沒有使用過像素放大器,因此我好奇它是否有可能採用該濾鏡,將其應用於bitmapimage並將旋轉後的圖像複製到背景圖像中。

這是我用盡(其中不工作):

shader = new Shader(new RotateFilter() as ByteArray); 
    shader.data.origin.value = [resizedImage.width/2, resizedImage.width/2]; 
    shader.data.rotation.value = [rotation]; 
    filter = new ShaderFilter(shader); 

    var bm:BitmapImage = new BitmapImage(); 
    bm.source = resizedImage; 
    bm.filters = [filter]; 

下一步該做什麼?這可能嗎?

回答

1

如果要將單個過濾器應用於位圖,請使用BitmapData.applyFilter()方法。顯然,你可以對結果位圖做任何事情。但是,您必須將所有這些應用於比UIComponent允許的級別更低的級別。如果您resizedImage的類型是位圖,你這樣做:

resizedImage.bitmapData.applyFilter(resizedImage.bitmapData,resizedImage.bitmapData.rect,new Point(),filter); 

在這之後,你的resizedImage.bitmapData將包含一個旋轉後的位。

+0

實際上已經嘗試過。 pixelBdender需要ShaderFilter,而applyFilter接受BitmapFilter。 – StephenNYC

+0

那麼,ShaderFilter是BitmapFilter的一個子類,所以它可以在這裏輕鬆使用。 – Vesper