|
|
|||||
Регистрация: Aug 2012
Сообщений: 77
|
Перенос shape в bitmapdata?
Доброго времени суток!
Прошу помочь разобраться с проблемкой: Хочу нарисовать на экземпляре Shape'а произвольные линии, далее эти линии загнать в BitmapData и выполнить поиск по цвету с определением координат. Привожу ниже состряпаный мною код. Линии рисует, но вот поиск не осуществляется... Думаю проблема в моем не умении загонять данные Shape'а в BitmapData. import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; import flash.display.Shape; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; public class PaintBall extends MovieClip { var child:Shape = new Shape(); var bmd:BitmapData = new BitmapData (200, 200); public function PaintBall() { addChild(child); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMD); stage.addEventListener(MouseEvent.MOUSE_UP, onMU); } public function onMD (e:MouseEvent):void{ var to_x = e.localX; var to_y = e.localY; child.graphics.lineStyle(2, 0x000000, 100, true, "normal", "none"); child.graphics.moveTo(to_x,to_y) stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } function enterFrameHandler(event:Event):void { var m_x:Number = stage.mouseX; var m_y:Number = stage.mouseY; if((m_x>5 && m_x<200) && (m_y>5 && m_y<200)){ child.graphics.lineTo(child.mouseX, child.mouseY); } } function onMU(event:MouseEvent):void { stage.removeEventListener("enterFrame", enterFrameHandler); bmd.draw(child); var coords:Point = null; for (var i:uint; i<bm.height; i++){ for (var j:uint; j<bm.width; j++){ if (bmd.getPixel(i,j) == 0x000000){ coords = new Point(i, j); trace('черный цвет найден по адресу:' + coords) } } } } } } |
|
|||||
1.
for (var i:uint; i<bm.height; i++){ for (var j:uint; j<bm.width; j++){ if (bmd.getPixel(i,j) == 0x000000){ coords = new Point(i, j); trace('черный цвет найден по адресу:' + coords) } } } 2. при отрисовывании шейпа размер битмапдаты остается тот, что был указан изначально 200x200, лучше определять размеры битмапдаты перед отрисовыванием шейпа.
__________________
ответ прост: be || !be == true |
|
|||||
Регистрация: Apr 2007
Сообщений: 1,369
|
Ух ты, а как такое скомпилировалось?
Где модификаторы доступа? можно просто:
__________________
john |
|
|||||
[+1 22.04.13]
[+1 06.03.13] Регистрация: Apr 2012
Сообщений: 239
|
у Point`а есть метод setTo(x:Number, y:Number) кстати
|
|
|||||
Регистрация: Apr 2007
Сообщений: 1,369
|
Цитата:
__________________
john |
|
||||||||
Регистрация: Aug 2012
Сообщений: 77
|
Цитата:
Цитата:
Цитата:
for (var i:uint; i<bmd.width; i++){ for (var j:uint; j<bmd.height; j++){ if (bmd.getPixel(i,j) == 0x000000){ coords = new Point(i, j); trace('черный цвет найден по адресу:' + coords) } } } Цитата:
Цитата:
Цитата:
Цитата:
Всем спасибо. Проблема осталось не решенной, цикл не ищет пиксели. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
В качестве предположения. Сделайте толщину линий 10, чисто для теста.
Я допускаю, что черных пикселей просто нет. Тонкие линии сглаживаются, битмапдата изначально белая, и черный цвет при сглаживании смешивается с белым, так что значения 0х000000 может реально не быть на рисунке.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
Ваш код полностью эквивалентент коду
И внутренний цикл выполняется ровно один раз. Устанавливайте начальные значения переменным в заголовке цикла. И вообще, избегайте декларации переменных без их инициализации в той же строке. |
|
|||||
то о чем я говорил, попробуйте:
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; import flash.display.Shape; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; public class PaintBall extends MovieClip { var child:Shape = new Shape(); //!!!!! var bmd:BitmapData; //!!!!! public function PaintBall() { addChild(child); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMD); stage.addEventListener(MouseEvent.MOUSE_UP, onMU); } public function onMD(e:MouseEvent):void { var to_x = e.localX; var to_y = e.localY; child.graphics.lineStyle(2, 0x000000, 100, true, "normal", "none"); child.graphics.moveTo(to_x, to_y) stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } function enterFrameHandler(event:Event):void { var m_x:Number = stage.mouseX; var m_y:Number = stage.mouseY; if ((m_x > 5 && m_x < 200) && (m_y > 5 && m_y < 200)) { child.graphics.lineTo(child.mouseX, child.mouseY); } } function onMU(event:MouseEvent):void { stage.removeEventListener("enterFrame", enterFrameHandler); //!!!!! if (child.width==0 || child.height==0) return; bmd = new BitmapData(child.width, child.height); //!!!!! bmd.draw(child); var coords:Point = null; for (var i:uint; i < bmd.height; i++) { for (var j:uint; j < bmd.width; j++) { if (bmd.getPixel(i, j) == 0x000000) { coords = new Point(i, j); trace('черный цвет найден по адресу:' + coords) } } } } } }
__________________
ответ прост: be || !be == true |
Часовой пояс GMT +4, время: 18:27. |
|
« Предыдущая тема | Следующая тема » |
|
|