AS3:How для изменения BitmapData цветного Битового массива на черный цвет и белый цвет?

Johannes:

@PConroy: Это было моей мыслью начальной буквы также. интересная часть на этом должна найти хорошие правила преобразования для различных частей адреса! Какие-либо хорошие предложения?

, Когда мы работали над этим типом проекта прежде, наш подход должен был взять наш существующий корпус адресов (150k или так), затем применить наиболее распространенные преобразования для нашего домена (Ирландия, таким образом, "Доктор"-> "Диск", "Ул."-> "Дорога", и т.д.). Я боюсь, что не было никакого всестороннего ресурса онлайн для таких вещей в то время, таким образом, мы закончили в основном придумывающий список сами, проверив вещи как телефонная книга (потребованный пространства там, адреса сокращены всем способом путей!). Как я упомянул ранее, Вы будете поражены, сколько "дубликатов" Вы обнаружите с добавлением только нескольких общих правил!

я недавно споткнулся через страницу с довольно всесторонним список сокращений адреса , хотя это является американским английским, таким образом, я не уверен, насколько полезный это было бы в Германии! Быстрый Google поднял несколько сайтов, но они казались, что спамная новостная рассылка подписалась прерывания. Хотя это было я гуглящий на английском языке, таким образом, у Вас может быть больше взгляда с "немецкими сокращениями адреса" на немецком языке:)

5
задан Yens 8 July 2009 в 15:38
поделиться

4 ответа

, это будет наиболее элегантное решение, которое я полагаю (с источником , являющимся вами BitmapData ):

const rc:Number = 1/3, gc:Number = 1/3, bc:Number = 1/3;
source.applyFilter(source.bitmapData, source.bitmapData.rect, new Point(), new ColorMatrixFilter([rc, gc, bc, 0, 0,rc, gc, bc, 0, 0, rc, gc, bc, 0, 0, 0, 0, 0, 1, 0]));

с flash.geom :: Point и flash.filters :: ColorMaxtrixFilter ...

ColorMatrixFilter позволяет многое, например, сдвиг оттенка, раскрашивание, осветление, затемнение и обесцвечивание и так далее ... в противном случае BitmapData :: paletteMap и ] BitmapData :: colorTransform - хорошее дополнение ...

просто хотел отметить, что использование следующего

const rc:Number = 1/3, gc:Number = 1/2, bc:Number = 1/6; 

выглядит немного естественнее, поскольку субъективно # 00FF00 ярче, чем # FF0000 ,что, в свою очередь, ярче, чем # 0000FF

удачи, тогда ...;)

greetz

back2dos

27
ответ дан 18 December 2019 в 05:33
поделиться

Ну, просто с помощью getPixel и setPixel, и усреднение цветов (я уверен, что есть другой способ сделать это с помощью фильтра или чего-то еще):

for(int i = 0; i < bitmapData.height; i++)
{
    for(int j = 0; j < bitmapData.width; j++)
    {
        var color:uint = bitmapData.getPixel(i, j);
        var red:uint = color & 0xFF0000 >> 16;
        var green:uint = color & 0x00FF00 >> 8;
        var blue:uint = color & 0x0000FF >> 0;
        var bwColor:uitn = red + green + blue / 3;
        bwColor = bwColor << 16 + bwColor << 8 + bwColor; // puts the average in each channel

        bitmapData.setPixel(i, j, bwColor);
    }
}
2
ответ дан 18 December 2019 в 05:33
поделиться

Спасибо, Cookie, Копирование исходных растровых данных было действительно самым простым решением для восстановления цвета.

   function clearColor() {
      colorbmd = new BitmapData(source.width, source.height);
      colorbmd = source.clone();
      //apply filter here    
    }
    function restoreColor() {
      source = colorbmd;
    }

Думаю, как только вы преобразовали изображение в черно-белое, вы не можете пойти назад (Вы теряете информацию во время конверсия). Вам нужно будет сделать скопируйте перед применением фильтра. - CookieOfFortune

1
ответ дан 18 December 2019 в 05:33
поделиться

Я пробовал оба метода. Похоже, что метод ColorMatrixFilter работает намного быстрее при работе с большими изображениями.

Есть ли способ удалить и фильтр? или я должен снова изменить значения ColorMatrixFilter?

0
ответ дан 18 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: