Как мне покрасить все пиксели, которые НЕ прозрачны для черного - PullRequest
2 голосов
/ 05 августа 2011

Я использую ColorMatixFilter на изображении во Flex.Я действительно близок к тому, чтобы получить нужное из фильтра.В основном любой PNG-файл, загружаемый пользователем, требует, чтобы все непрозрачные пиксели были окрашены в черный цвет.У меня есть функция, которая уже устанавливает «яркость», так что я просто через очень большое отрицательное число, например -1000, выполняет свою работу, но проблема в том, что все пиксели, которые имеют альфа, скажем, 0,9 или ниже, в конечном итогебудучи белым, когда я кодирую свой файл PNG на сервере позже.

вот код, который я сейчас использую

public static function setBrightness(value:Number):ColorMatrixFilter
    {
        value = value * (255 / 250);

        var m:Array = new Array();
        m = m.concat([1, 0, 0, 0, value]); // red
        m = m.concat([0, 1, 0, 0, value]); // green
        m = m.concat([0, 0, 1, 0, value]); // blue
        m = m.concat([0, 0, 0, 1, 0]); // alpha

        return new ColorMatrixFilter(m);
    }

Я бы хотел, чтобы все пиксели были полностью черными, если только пиксель не является полностьюпрозрачный и не уверен, как настроить значения, чтобы получить это из него.

1 Ответ

6 голосов
/ 05 августа 2011

Вы должны взглянуть на BitmapData.threshold () , так как он делает в точности то, что вам нужно.Перефразируя пример по ссылке, вы должны сделать что-то вроде этого:

// png is your PNG BitmapData
var bmd:BitmapData = new BitmapData(png.width, png.height, true, 0xff000000);
var pt:Point = new Point(0, 0);
var rect:Rectangle = bmd.rect;
var operation:String = "<";
var threshold:uint = 0xff000000;
var color:uint = 0x00000000;
var maskColor:uint = 0xff000000;
bmd.threshold(png, rect, pt, operation, threshold, color, maskColor, true);

Здесь мы настроили вызов threshold(), который проверит каждый пиксель png и заменит цвет пикселя.с черным, если значение альфа для этого пикселя не равно 100% (0xff).

В этом случае threshold равно 0xff000000 (значение ARGB ), что соответствует черному при100% прозрачность.Наш цвет маски также установлен на 0xff000000, что говорит threshold(), что нас интересуют только значения альфа («A» в ARGB) для каждого пикселя.Наше значение для operation означает «меньше чем», если значение пикселя, определенное путем применения maskColor ниже threshold, заменить на color.

...