从byteArray读取位图数据时,AS3非乘法alpha

时间:2012-09-04 07:06:07

标签: actionscript-3

我正在尝试从ByteArray中读取位图并且我正在使用:

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

但是,我正在阅读的位图预先乘以alpha,使用此方法会在某些半透明区域中以灰色像素结束。

有没有办法可以在代码中取消源代码?或者可能采用不同的方式加载ByteArray以解决这个问题?

1 个答案:

答案 0 :(得分: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设置正确的阈值即可。这里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);