PDA

Просмотр полной версии : Определение количества того или иного цвета...


Maraekb
27.02.2010, 16:07
Подскажите пожалуйста возможно ли определение количество того или иного цвета у загружаемой картинки:o:rolleyes:

Zebestov
27.02.2010, 16:52
у картинки есть цвет? это у картинки Малевича есть цвет — черный =) и квадратный...

derhab
27.02.2010, 17:29
если я правильно понял и нужно получить процентное содержание пикселей определенного цвета в битмапдате, то можно так


function getColorPercent(bmd:BitmapData, sColor:uint):Number
{
var w:int = bmd.width;
var h:int = bmd.height;
var totalPixels:int = w * h;
var count:int;

for(var i:int = 0; i < w; i++){
for(var j:int = 0; j < h; j++){
var col:uint = bmd.getPixel(i, j);
if(col == sColor)count++;
}
}

return count * 100 / totalPixels;
}

Котяра
01.03.2010, 10:45
Ну может некое среднее по больнице - типа Розовый период Пикассо))))
т.е. оттенки розового преобладают.
Вопрос сложный на самом деле.. тут надо более точно сформулировать ваши требования.
Какое количество цвета по вашему у равномерного градиента от чистокрасного FF00FF к чисто зелёному 00FF00 ?

derhab
02.03.2010, 05:32
...от чистокрасного FF00FF...
FF00FF это не красный:)

Добавлено через 43 минуты
например, красно-зеленый градиент 100х100


var shape:Shape = new Shape();

shape.graphics.beginGradientFill('linear', [0xff0000, 0x00ff00, 0x00ff00], [1, 1, 1], [140, 250, 255]);
shape.graphics.drawRect(0, 0, 100, 100);
shape.graphics.endFill();

var bmd:BitmapData = new BitmapData(shape.width, shape.height)
bmd.draw(shape);

function getColorPercent(bmd:BitmapData, sColor:uint):Number
{
var w:int = bmd.width;
var h:int = bmd.height;
var totalPixels:int = w * h;
var count:int;

for(var i:int = 0; i < w; i++){
for(var j:int = 0; j < h; j++){
var col:uint = bmd.getPixel(i, j);
if(col == sColor)count++;
}
}

return count * 100 / totalPixels;
}

var redPercent:Number = getColorPercent(bmd, 0xff0000);
trace("содержание чистого красного = " + redPercent + " %"); // 11%
var greenPercent:Number = getColorPercent(bmd, 0x00ff00);
trace("содержание чистого зеленого = " + greenPercent + " %"); // 4%

Котяра
02.03.2010, 10:17
Очепятался - должно быть 0xFF0000..
я вообще не по поводу getColorPercent спрашивал, а у топикстартера - какое значение он хотел бы получить от градиентной картинки.. Исходя из этого уже придумывать алгоритм..