Как я и предлагал, вот пример работы с гистограммой.
Класс "подборщика" цвета:

Код AS3:
package
{
import flash.display.BitmapData;
public final class ColorPickup
{
public function ColorPickup(){}
// Функция нахождения контрастного цвета исходя из цвета
public static function pickedForColor(color:uint):uint
{
return (0xFFFFFF - color);
}
// Функция нахождения цвета исходя из изображения
public static function pickedForBitmap(bitmapData:BitmapData,contrast:Boolean):uint
{
var histogram:Vector.<Vector.<Number>> = bitmapData.histogram(),
rmax:uint=0,
gmax:uint=0,
bmax:uint=0,
r:uint=0,
g:uint=0,
b:uint=0,
color:uint;
for (var i:uint = 0; i < 256; i++) {
if (rmax < histogram[0][i]) {
rmax = histogram[0][i];
r = i;
}
if (gmax < histogram[1][i]) {
gmax = histogram[1][i];
g = i;
}
if (bmax < histogram[2][i]) {
bmax = histogram[2][i];
b = i;
}
}
color = ((r << 16) | (g << 8) | b);
if(contrast) color=pickedForColor(color);
return color;
}
}
}
Тестируем:

Код AS3:
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
public class project extends Sprite
{
[Embed(source = 'testimage.jpg')] private var TestImage:Class;
private var bitmap:Bitmap = new TestImage();
public function project()
{
addChild(bitmap);
bitmap.x = (stage.stageWidth - bitmap.width)/2;
bitmap.y = (stage.stageHeight - bitmap.height) / 2;
var color:uint = ColorPickup.pickedForBitmap(bitmap.bitmapData, false);
graphics.beginFill(color);
graphics.drawRect(bitmap.x - 10, bitmap.y - 10, bitmap.width + 20, bitmap.height + 20);
graphics.endFill();
}
}
}
Если в функции
pickedForBitmap второй параметр (
contrast) будет
false, то вернется "усредненный" цвет.
пример:
