我想提取位图的最常见颜色。我的第一个想法是通过循环bitmapData并提取每个像素颜色并将其存储在数组中来做到这一点。
但是功能必须尽可能轻,所以我的问题是;是否有更轻量级的方法来实现这一目标?
该函数用于提取位图的背景颜色。
答案 0 :(得分:1)
可以使用BitmapData类的histogram()函数。查看http://cc.mcgarrybowen.com/labs/2011/02/tip-use-as3s-histogram-method-for-color-averaging/了解其背后的信息
答案 1 :(得分:0)
是不是可以猜测例如左上角的像素是背景的一部分并使用那种颜色?
答案 2 :(得分:0)
取决于所呈现的视觉信息的某种变体Monte Carlo method可能适合。特别是,如果您正在显示摄影图像,那么随机抽样(random is weighted)会给您足够的表现。因此,例如,您可以选择使用xor-shift random(因为它会比AS3 Math.random()
更快)并从以下方式读取BitmapData生成的ByteArray中的颜色值:pixels.readUnsignedInt(xorShiftRandom() * pixels.length)
in case BitmapData使用ARGB格式。
此外,您还需要构建直方图,以便类似的颜色可以创建多数。然后,您必须随意选择颜色被认为相似的程度(直方图的多少个区域计入相同的颜色),从而通过尝试分组来找到最常见的颜色。
您还可以预处理图像(通过下采样)。我手边没有任何数学证明,但感觉你不需要大于255x255的图像来达到预期的效果。
答案 3 :(得分:0)
你可以缩小位图,给它一个很大的模糊,然后在中点选择颜色。