Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Градиентная заливка BitmapData (http://www.flasher.ru/forum/showthread.php?t=148748)

nbno 10.01.2011 06:22

Градиентная заливка BitmapData
 
Здравствуйте.

Задача: Создать диагональную штриховку, на которую бы накладывался градиент. Программно.
Как я это пытаюсь сделать:

Создаю градиент (400x400):
Код AS3:

var gradient:Shape = new Shape();
var matrix:Matrix = new Matrix();
matrix.createGradientBox(400, 400, Math.PI/2, 0, 0);
gradient.graphics.beginGradientFill(GradientType.LINEAR, [0x00FF00, 0x0000FF], [1, 1], [0, 255], matrix);
gradient.graphics.drawRect(0, 0, 400, 400);
addChild(gradient);

Создаю штриховку:
Код AS3:

//заполняем BitmapData
var bitmapdata:BitmapData = new BitmapData(3, 3, true, 0x000000);
bitmapdata.setPixel32(0, 1, 0xffffffff);
bitmapdata.setPixel32(1, 0, 0xffffffff);
bitmapdata.setPixel32(2, 2, 0xffffffff);
 
//заливаем им Shape, который потом будет маской
var mask:Shape = new Shape();
mask.graphics.beginBitmapFill(bitmapdata);
mask.graphics.drawRect(0, 0, 400, 400);
addChild(mask);

Пытаюсь сделать mask маской gradient:
Код AS3:

gradient.mask = mask

Результат: маска не применяется (mask исчезает, gradient остается полностью видимым). Есть ли более правильные/корректные или альтернативные варианты сделать тоже самое?

saikspaik 10.01.2011 08:37

Я попробовал код, у меня он заработал, нужно было только переменную mask переименовать (иначе конфликт происходит).
Правда про штриховку не совсем понял, иллюстрация желаемого результата только ускорит решение проблемы.

nbno 10.01.2011 09:09

С переименованием или без у меня результат один и тот же.
Иллюстрации, учитывая, что фон черный:

Цитата:

Создаю градиент:
http://img-samara.fotki.yandex.ru/ge...4f56e_orig.png
gradient:Shape
Цитата:

Создаю штриховку (белого цвета):
http://img-samara.fotki.yandex.ru/ge...1c58e_orig.png
mask:Shape
Цитата:

Пытаюсь сделать mask маской gradient:
http://img-samara.fotki.yandex.ru/ge...e3211_orig.png
Цитата:

Результат: маска не применяется (mask исчезает, gradient остается полностью видимым)
http://img-samara.fotki.yandex.ru/ge...4f56e_orig.png

Wolsh 10.01.2011 09:40

чтобы учитывалась прозрачность, надо кешировать в битмап (.casheAsBitmap = true)
Код AS3:

var gradient:Shape = new Shape();
var matrix:Matrix = new Matrix();
matrix.createGradientBox(400, 400, Math.PI/2, 0, 0);
gradient.graphics.beginGradientFill(GradientType.LINEAR, [0x00FF00, 0x0000FF], [1, 1], [0, 255], matrix);
gradient.graphics.drawRect(0, 0, 400, 400);
gradient.cacheAsBitmap = true;
addChild(gradient);
//заполняем BitmapData
var bitmapdata:BitmapData = new BitmapData(3, 3, true, 0x000000);
bitmapdata.setPixel32(0, 1, 0xffffffff);
bitmapdata.setPixel32(1, 0, 0xffffffff);
bitmapdata.setPixel32(2, 2, 0xffffffff);
 
//заливаем им Shape, который потом будет маской
var strokeMask:Shape = new Shape();
strokeMask.graphics.beginBitmapFill(bitmapdata);
strokeMask.graphics.drawRect(0, 0, 400, 400);
strokeMask.cacheAsBitmap = true;
addChild(strokeMask);
gradient.mask = strokeMask;


nbno 10.01.2011 10:23

Первоначальные варианты реализации включали casheAsBitmap, но видимо в другой интерпретации:)
Большое спасибо, все работает замечательно.


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

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