Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Заливка цветом с сохранением бликов (http://www.flasher.ru/forum/showthread.php?t=176407)

Samuraix 09.03.2012 17:56

Заливка цветом с сохранением бликов
 
Здравствуйте.
Задача в следующем:
есть картинка с бликами, поверх нее я создаю Sprite залитый нужным цветом.
Естесственно, вся картинка оказывается "под" этим цветом. Для сохранения естесственности мне нужно блики (а это места картинки с цветом 0хFFFFFF условно) поднять над слоем с цветом.
Пробовал blendmode.OVERLAY, но исходный цвет спрайта искажается, что логично:)
Может быть, кто-нибудь сталкивался с подобной задачей или какие-то мысли есть, буду благодарен.

Спасибо.

nOobCrafter 09.03.2012 18:09

ColorMatrixFilter подойдет? посмотрите плагин к твинлайту или руками забейте нужные значения.

Zebestov 09.03.2012 18:31

Код AS3:

/**
 *
 * @param solidColorImage изображение, залитое сплошным цветом
 * @param originalImage оригинал изображения с необходимыми бликами
 * @param threshold значение порога (0...255) выше которого мы считаем цвет бликом
 * @param spotlightColor цвет добавляемого блика в формате AARRGGBB
 *
 */

 
public function addSpotlight(solidColorImage:BitmapData, originalImage:BitmapData, threshold:uint = 0xff, spotlightColor:uint = 0xffffffff):void
{
    if (threshold > 255)
    {
        throw new ArgumentError("параметр threshold должен находиться в диапазоне 0...255");
    }
    var rect:Rectangle = solidColorImage.rect;
    var point:Point = new Point(0, 0);
    solidColorImage.threshold(originalImage, rect, point, ">=", threshold, spotlightColor, 0x000000ff);
}

Писал все прямо тут.
К неоспоримым недостаткам метода можно отнести работу с одним лишь каналом (сейчас синим, можно поменять). Это будет давать артефакты на ярких цветах вообще. Т.е. для него ярко синий или сиреневый цвета тоже будут бликами. Ярко зеленые/красные/желтые — нет.

Samuraix 09.03.2012 18:32

Цитата:

Сообщение от nOobCrafter (Сообщение 1068037)
ColorMatrixFilter подойдет? посмотрите плагин к твинлайту или руками забейте нужные значения.

Простите, немного не понял. К чему применить этот фильтр? Вроде как с ним работал, но в данной ситуации не вижу, как использовать..
Спасибо.

Добавлено через 4 минуты
Цитата:

Сообщение от Zebestov (Сообщение 1068040)
Код AS3:

/**
 *
 * @param solidColorImage изображение, залитое сплошным цветом
 * @param originalImage оригинал изображения с необходимыми бликами
 * @param threshold значение порога (0...255) выше которого мы считаем цвет бликом
 * @param spotlightColor цвет добавляемого блика в формате AARRGGBB
 *
 */

 
public function addSpotlight(solidColorImage:BitmapData, originalImage:BitmapData, threshold:uint = 0xff, spotlightColor:uint = 0xffffffff):void
{
    if (threshold > 255)
    {
        throw new ArgumentError("параметр threshold должен находиться в диапазоне 0...255");
    }
    var rect:Rectangle = solidColorImage.rect;
    var point:Point = new Point(0, 0);
    solidColorImage.threshold(originalImage, rect, point, ">=", threshold, spotlightColor, 0x000000ff);
}

Писал все прямо тут.
К неоспоримым недостаткам метода можно отнести работу с одним лишь каналом (сейчас синим, можно поменять). Это будет давать артефакты на ярких цветах вообще. Т.е. для него ярко синий или сиреневый цвета тоже будут бликами. Ярко зеленые/красные/желтые — нет.

Спасибо большое! Буду применять:)

Zebestov 09.03.2012 18:39

А вообще если нужно делать такое программно, то:

1. оригинал делаем grayscale
2. полученное изображение "вытягиваем" так, чтобы все, что темнее бликов стало черным
3. создаем картинку белого цвета и копируем ей в альфу любой канал (RGB) из предыдущего изображения

Получится программно созданный слой с бликами на прозрачном фоне.


Часовой пояс GMT +4, время: 21:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.