我没有使用 Pixel Bender 的经验,并且着色语言对我来说似乎是胡言乱语,所以我想知道是否有人可以帮助我重写以下 as3 代码以用作 Pixel Bender 过滤器/着色器。它的工作方式是我想将 16777215 种颜色转换为我在调色板数组中定义的 4 种色调(首先是最浅的颜色,最后是最深的颜色)。结果令人满意,但性能很差,这就是我想做一个过滤器的原因。这是代码:(sbitmap 是我库中的图像)
var display:Bitmap = new Bitmap(new sbitmap());
var palette:Vector.<uint> = new <uint>[0x485B61, 0x4B8E74, 0xA6E76D, 0xD1FE85];
var data:BitmapData = display.bitmapData;
addChild(display);
const inc:int = int(0xFFFFFF/4)+1;
for(var i:int = 0; i < data.height; i++)
{
for(var j:int = 0; j < data.width; j++)
{
var color:uint = data.getPixel(j, i);
var pIndex:int = 0;
for(var k:int = 0; k < 0xFFFFFF; k += inc)
{
if(color >= k && color < k + inc)
{
data.setPixel(j, i, palette[pIndex]);
break;
}
pIndex++;
}
}
}
这是我得到的结果:http: //fc05.deviantart.net/fs70/f/2012/243/c/6/screen_shot_2012_08_30_at_1_19_10_pm_by_johnjensen-d5d1ms3.png