![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2005
Сообщений: 73
|
Есть рисунок png. Есть задача при ведении по рисунку кистью (курсором), делать эту область прозрачной.
Вопрос: Как это можно реализовать? Спасибо. |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
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 |
|
|||||
|
Регистрация: Nov 2005
Сообщений: 73
|
Супер, большое спасибо
|
|
|||||
|
Регистрация: Nov 2005
Сообщений: 73
|
а можно ли задать как-то не полностью прозрачную область а с какой-то альфой ? т.е. чтоб при ведении мышки облать становилась прозрачной спустя N раз
|
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
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 |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 430
|
Поясните, пожалуйста, почему ваш способ работает? )
Тут, вроде, нет ни режимов наложения, ни маски.. Странно даже )
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь. |
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Я отрисовываю картинку в битмапдату, создаю битмапу на основе этой битмапдаты и во время движения курсора закрашиваю прямоугольную область прозрачным цветом.
Вообще как объяснить, если код перед вами?
__________________
hauts.ru |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 430
|
А разве форум существует не для того, что бы спрашивать, если что-то непонятно? )
Цитата:
Но теперь мне стало понятнее, а вам, надеюсь, не поплохело от двух написанных строчек ) Так что — спасибо )
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Не "закрашиваю прямоугольную область прозрачным цветом", а "копирую в прямоугольную область те же самые пиксели, что и в этой области, но с альфой, взятой из alphaBitmapData". После первого прохода альфа этих (непрозрачных) пикселей станет 0хСС. При втором проходе за исходные будут приняты уже эти полупрозрачные пиксели и их альфа будет уменьшена еще раз (на 0хFF - 0xCC = 0х33). И так далее.
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|