我正在尝试从ByteArray中读取位图并且我正在使用:
bitmapData = new BitmapData(width, height, transparent);
bitmapData.setPixels(new Rectangle(0, 0, width, height), byteArray);
但是,我正在阅读的位图预先乘以alpha,使用此方法会在某些半透明区域中以灰色像素结束。
有没有办法可以在代码中取消源代码?或者可能采用不同的方式加载ByteArray以解决这个问题?
答案 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);