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

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

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

Регистрация: Nov 2005
Сообщений: 73
По умолчанию Прозрачность части изображения

Есть рисунок png. Есть задача при ведении по рисунку кистью (курсором), делать эту область прозрачной.
Вопрос: Как это можно реализовать?

Спасибо.

Старый 16.12.2012, 17:11
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.geom.Rectangle;
 
var bd:BitmapData = new BitmapData(image.width,image.height,true,0x00000000);
bd.draw(image);
 
var bitmap:Bitmap = new Bitmap(bd);
var bitmapContainer:Sprite = new Sprite();
bitmapContainer.addChild(bitmap);
addChild(bitmapContainer);
 
bitmapContainer.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
function mouseMoveHandler(e:MouseEvent):void {
	//bd.setPixel32(bitmapContainer.mouseX, bitmapContainer.mouseY, 0x00000000);
	bd.fillRect(new Rectangle(bitmapContainer.mouseX - 5, bitmapContainer.mouseY - 5, 10, 10), 0x000000);
}
Например так можно.
__________________
hauts.ru

Старый 16.12.2012, 17:27
Bekass вне форума Посмотреть профиль Отправить личное сообщение для Bekass Найти все сообщения от Bekass
  № 3  
Ответить с цитированием
Bekass

Регистрация: Nov 2005
Сообщений: 73
Супер, большое спасибо

Старый 16.12.2012, 17:31
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Не за что, обращайтесь.
__________________
hauts.ru

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

Регистрация: Nov 2005
Сообщений: 73
а можно ли задать как-то не полностью прозрачную область а с какой-то альфой ? т.е. чтоб при ведении мышки облать становилась прозрачной спустя N раз

Старый 16.12.2012, 19:27
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 6  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.geom.Rectangle;
import flash.geom.Point;
 
var bd:BitmapData = new BitmapData(image.width,image.height,true,0x00000000);
bd.draw(image);
 
var bitmap:Bitmap = new Bitmap(bd);
var bitmapContainer:Sprite = new Sprite();
bitmapContainer.addChild(bitmap);
addChild(bitmapContainer);
var alphaBitmapData:BitmapData = new BitmapData(20,20,true,0xCC000000);
bitmapContainer.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
 
function mouseMoveHandler(e:MouseEvent):void {
	var p:Point = new Point(bitmapContainer.mouseX - 5,bitmapContainer.mouseY - 5);
	var rect:Rectangle = new Rectangle(p.x,p.y,10,10);
	bd.copyPixels(bd, rect, p, alphaBitmapData);
}
Так?
__________________
hauts.ru

Старый 17.12.2012, 09:55
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 7  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от Hauts Посмотреть сообщение
[as3]

Например так можно.
Поясните, пожалуйста, почему ваш способ работает? )
Тут, вроде, нет ни режимов наложения, ни маски.. Странно даже )
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

Старый 17.12.2012, 11:04
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 8  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Я отрисовываю картинку в битмапдату, создаю битмапу на основе этой битмапдаты и во время движения курсора закрашиваю прямоугольную область прозрачным цветом.

Вообще как объяснить, если код перед вами?
__________________
hauts.ru

Старый 17.12.2012, 12:11
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 9  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от Hauts Посмотреть сообщение
Вообще как объяснить, если код перед вами?
А разве форум существует не для того, что бы спрашивать, если что-то непонятно? )
Цитата:
Сообщение от Hauts Посмотреть сообщение
Я отрисовываю картинку в битмапдату, создаю битмапу на основе этой битмапдаты и во время движения курсора закрашиваю прямоугольную область прозрачным цветом.
За объяснение спасибо. Сначала понял действия кода примерно так: рисуем битмапдату и на ней рисуем прозрачные прямоугольники, а т.к. они прозрачные под ними должна быть видна картинка.
Но теперь мне стало понятнее, а вам, надеюсь, не поплохело от двух написанных строчек )
Так что — спасибо )
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не "закрашиваю прямоугольную область прозрачным цветом", а "копирую в прямоугольную область те же самые пиксели, что и в этой области, но с альфой, взятой из alphaBitmapData". После первого прохода альфа этих (непрозрачных) пикселей станет 0хСС. При втором проходе за исходные будут приняты уже эти полупрозрачные пиксели и их альфа будет уменьшена еще раз (на 0хFF - 0xCC = 0х33). И так далее.
__________________
Reality.getBounds(this);

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

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

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


 


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


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