2012-09-04 41 views
0

我試圖從ByteArray中將位圖來讀取和我使用:AS3未乘阿爾法從字節組

bitmapData = new BitmapData(width, height, transparent); 
bitmapData.setPixels(new Rectangle(0, 0, width, height), byteArray); 

然而,位圖我讀了預乘以alpha,並且使用這種方法在一些半透明區域中以灰色像素結束。

有沒有一種方法可以使代碼中的源代碼倍增?或者加載ByteArray來解決這個問題的一種不同方式?

+0

什麼是var值「透明「? –

回答

0

例如,可以使用着色器過濾器對alpha進行非乘法運算。說像這樣的:

kernel unmultiply_alpha 
< namespace : "Your Namespace"; 
    vendor : "Your Vendor"; 
    version : 1; 
> 
{ 
    input image4 src; 
    output pixel4 dst; 

    void 
    evaluatePixel() 
    { 
     pixel4 samp = sampleNearest(src,outCoord()); 
     if (samp.a>0.1) { 
      samp.r=samp.r/samp.a; 
      samp.g=samp.g/samp.a; 
      samp.b=samp.b/samp.a; 
     } 
     dst=samp; 
    } 
} 

只需設置在代碼阿爾法正確的閾值。這裏的alpha在間隔0..1,所以使用適當的值。 是,應用過濾器,你先導入着色器的PBJ(做出PBJ,使用的Pixel Bender)在你的代碼爲ByteArray,然後使用:

var shader:Shader=new Shader(new ImportedShader() as ByteArray); 
var filter:ShaderFilter=new ShaderFilter(shader); 
bitmapData.applyFilter(bitmapData,bitmapData.rect,new Point(),filter);