gpt4 book ai didi

actionscript-3 - 如何从 bitmapData 对象(或字节数组)中过滤特定颜色

转载 作者:行者123 更新时间:2023-12-01 00:00:45 25 4
gpt4 key购买 nike

我正在寻找一种从 ActionScript 3 中的 bitmapData 对象过滤特定颜色的有效方法。目前我使用带有 readByte32() 的循环。这需要大约一秒钟的时间来处理,这是 Not Acceptable 。我一直在尝试让 PaletteMap() 工作,但到目前为止还没有掌握它的 API(任何真正有用的链接?谷歌让我失望了......)。

这是我目前的逻辑,我想改进:

var n:int = bitmapData.width;
for (var i:int = 0; i < n; i++) {
var m:int = bitmapData.height;
for (var j:int = 0; j < m; j++) {
var color:int = bitmapData.getPixel(i, j);
if (color == 0xCACACA) {
bitmapData.setPixel32(i, j, 0x00000000);
}
}
}

我可以通过使用 Vectors 获得稍微更好的性能,但它只是稍微好一点......
var v:Vector.<uint> = bitmapData.getVector(bitmapData.rect);
var n:int = bitmapData.width * bitmapData.height;
for (var i:int = 0; i < n; i++) {
var color:uint = v[i];
v[i] = color == 0xFFCACACA ? 0x00000000 : color;
}
bitmapData.setVector(bitmapData.rect, v);

我真的认为必须有一种更好的方法来做到这一点,只需要几个 100 毫秒。如果谁能为我解开bitmapData的奥秘,你就是我族人的新领袖。

PS 我正在使用 bitmapData.lock() 和 unlock();我只是没有发布样板文件。

最佳答案

一个简单的方法是使用 threshold方法。一开始有点麻烦,但它很快(我认为你会得到尽可能快)

这会将每个红色像素(仅将红色视为值恰好为 0xffff0000 的像素)更改为蓝色 (0xff0000ff)。

var colorToReplace:uint = 0xffff0000;
var newColor:uint = 0xff0000ff;
var maskToUse:uint = 0xffffffff;

var rect:Rectangle = new Rectangle(0,0,bitmapData.width,bitmapData.height);
var p:Point = new Point(0,0);
bitmapData.threshold(bitmapData, rect, p, "==", colorToReplace,
newColor, maskToUse, true);

关于actionscript-3 - 如何从 bitmapData 对象(或字节数组)中过滤特定颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com