Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.01.2011, 22:16
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 1  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
По умолчанию apply Alpha Gradient to BitmapData

Собственно програмное рисование для меня загадка. Загружаю я картинку, и надо мне програмно сделать для неё градиентную альфа маску. Собственно как для типа BitmapData сделать градиентную alpha заливку? Что бы например альфа уменьшалась от нижнего к верхнему.


Последний раз редактировалось metsys; 17.01.2011 в 22:19.
Старый 17.01.2011, 23:34
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 2  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
рисуете шейп с нужным вам вариантом маски, далее устанавливаете св-ва cacheAsBitmap = true; обои и назначаете маску

Старый 18.01.2011, 00:32
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 3  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Для BitmapData делаете copyChannel() в альфа-канал из другой битмапдаты с нужным градиентом или картой прозрачностей. Копировать можно и не альфа-канал, разумеется, но - В альфа)).
__________________
Reality.getBounds(this);

Старый 18.01.2011, 12:54
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 4  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
сижу ломаю голову ничерта не получается, может кто то кусок кода привести хотя бы приблезительный?
вот загрузил я картинку, представил её в виде BitmapData
Код AS3:
var bmd:BitmapData=e.target.content.bitmapData;
а как мне на неё альфаканал наложить?

Добавлено через 3 часа 12 минут
и так вот до чего я дошёл

Код AS3:
import flash.display.Bitmap;
import flash.display.BitmapData;
 
var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC);
var al:Number=255/100;
var onePercent:Number=bmd.height/100;
for (var i:uint=0; i<80; i++)
{
	for (var j:int=0; j<80; j++)
	{
		var gtPxl32:uint = bmd.getPixel32(j, i);
		var alphaValue:uint = gtPxl32 >> 24 & 0x11;
		trace(alphaValue.toString(16));
 
		var q:int=(100-(i/onePercent));
		var point:uint=gtPxl32;//-(q+0x10000000);
 
		bmd.setPixel32(j, i, point);
	}
	//trace(q);
}
 
var bm:Bitmap = new Bitmap(bmd);
addChild(bm);
я беру какую нибудь исходную BitmapData, копирую её попиксельно, и в процессе копирования каждый рядок хочу сделать прозрачным с определённым значением q. Как мне q типа int перевести в uint и поставить это значение вместо альфа канало от исходной BitmapData?
Это единственное что я придумал как сделать альфа градиент к картинке.

Старый 18.01.2011, 18:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 5  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
//черная полоска будет под битмапом для теста прозрачности.
var testShape:Shape = new Shape();
testShape.graphics.beginFill(0x000000);
testShape.graphics.drawRect(30, 0, 20, 250)
addChild(testShape);
//рабочая битмапдата
var bmd:BitmapData = new BitmapData(80, 80, true, 0xFFCCCCCC);
var bm:Bitmap = new Bitmap(bmd);
addChild(bm);
//будущая карта прозрачности
var alphaMap:BitmapData = bmd.clone();
//матрица для управления градиентом
var matrix:Matrix = new Matrix();
matrix.createGradientBox(bmd.width, bmd.height, Math.PI / 2);
//векторный градиент для отрисовки в карту прозрачности
var gradient:Shape = new Shape();
gradient.graphics.beginGradientFill("linear", [0xFFFFFF, 0x000000], [1, 1], [0, 255], matrix);
gradient.graphics.drawRect(0, 0, bmd.width, bmd.height);
gradient.graphics.endFill();
// отрисовываем в карту
alphaMap.draw(gradient);
//копируем любой канал (т.к. все изменяются одинаково от 0 до 255) в альфаканал рабочей битмап
bmd.copyChannel(alphaMap, new Rectangle(0, 0, bmd.width, bmd.height), new Point(), 2, 8);
__________________
Reality.getBounds(this);

Старый 18.01.2011, 20:38
metsys вне форума Посмотреть профиль Отправить личное сообщение для metsys Найти все сообщения от metsys
  № 6  
Ответить с цитированием
metsys

Регистрация: Feb 2010
Сообщений: 102
в общем сделал такой геморой, и он работает, но наверное выполнение сего кода огого какое большое. Что вы скажите по поводу этого? :
Код AS3:
import flash.display.Bitmap;
import flash.display.BitmapData;
 
var bmd:BitmapData = new BitmapData(80, 80, true, 0xFF00FF00);
var onePercent:Number=bmd.height/100;
 
for (var i:uint=0; i<80; i++)
{
	var q:uint=(2.55*(100-(i/onePercent)));
	for (var j:int=0; j<80; j++)
	{
		var gtPxl:uint = bmd.getPixel(j, i);
 
		var argb:uint=0;
		argb += (q<<24);
		argb += (gtPxl);
 
		bmd.setPixel32(j, i, argb);
	}
	trace(q);
}
 
var bm:Bitmap = new Bitmap(bmd);
addChild(bm);
сейчас буду разбиратся с кодом Wolsh

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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