Ну, раз используется 9я версия, переписал класс для 9й версии:
Код AS3:
package
{
import flash.display.BitmapData;
import flash.utils.ByteArray;
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:Array = getHistogram(bitmapData),
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;
}
// Функция нахождения гистограммы изображения
public static function getHistogram(bitmapData:BitmapData):Array
{
var bytes:ByteArray = bitmapData.getPixels(bitmapData.rect),
array:Array = new Array(3),
currentByte:int,
r:int,
g:int,
b:int;
array[0] = new Array(256);
array[1] = new Array(256);
array[2] = new Array(256);
for (var i:uint = 0; i < 256; i++) {
array[0][i] = array[1][i] = array[2][i] = 0;
}
bytes.position = 0;
while (bytes.bytesAvailable != 0) {
currentByte = bytes.readUnsignedInt();
r = (currentByte & 0x00FF0000) >> 16;
g = (currentByte & 0x0000FF00) >> 8;
b = (currentByte & 0x000000FF);
array[0][r] += 1;
array[1][g] += 1;
array[2][b] += 1;
}
return array;
}
}
}