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

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

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

Регистрация: Aug 2012
Сообщений: 77
Question Перенос shape в bitmapdata?

Доброго времени суток!

Прошу помочь разобраться с проблемкой:
Хочу нарисовать на экземпляре Shape'а произвольные линии, далее эти линии загнать в BitmapData и выполнить поиск по цвету с определением координат. Привожу ниже состряпаный мною код. Линии рисует, но вот поиск не осуществляется... Думаю проблема в моем не умении загонять данные Shape'а в BitmapData.

Код AS3:
        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)
					}
				}
			}
		}
        }
}

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
BitmapData.getColorBoundsRect вам не поможет?

А вообще можно попробовать цикл поменять чуток:
Код AS3:
			for (var i:int = 0; i<bmd.width; i++){
				for (var j:int = 0; j<bmd.height; j++){
 
					if (bmd.getPixel(i,j) == 0x000000){
						coords = new Point(i, j);
						trace('черный цвет найден по адресу:' + coords)
					}
				}
			}
__________________
hauts.ru

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

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
1.
Код AS3:
			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)
					}
				}
			}
переменная bm не определена
2. при отрисовывании шейпа размер битмапдаты остается тот, что был указан изначально 200x200, лучше определять размеры битмапдаты перед отрисовыванием шейпа.
__________________
ответ прост: be || !be == true

Старый 01.11.2012, 20:48
Molecula вне форума Посмотреть профиль Отправить личное сообщение для Molecula Найти все сообщения от Molecula
  № 4  
Ответить с цитированием
Molecula
 
Аватар для Molecula

Регистрация: Apr 2007
Сообщений: 1,369
Ух ты, а как такое скомпилировалось?
Код AS3:
var child:Shape = new Shape();		
var bmd:BitmapData = new BitmapData (200, 200);
Где модификаторы доступа?

Код AS3:
var coords:Point = null;
можно просто:
Код AS3:
var coords:Point;
__________________
john

Старый 01.11.2012, 20:58
gagaga вне форума Посмотреть профиль Отправить личное сообщение для gagaga Найти все сообщения от gagaga
  № 5  
Ответить с цитированием
gagaga
[+1 22.04.13]
[+1 06.03.13]

Регистрация: Apr 2012
Сообщений: 239
у Point`а есть метод setTo(x:Number, y:Number) кстати

Старый 01.11.2012, 21:03
Molecula вне форума Посмотреть профиль Отправить личное сообщение для Molecula Найти все сообщения от Molecula
  № 6  
Ответить с цитированием
Molecula
 
Аватар для Molecula

Регистрация: Apr 2007
Сообщений: 1,369
Цитата:
и выполнить поиск по цвету с определением координат
Координаты всех какого-то цвета пикселей нужны?
__________________
john

Старый 01.11.2012, 22:31
SpetZ_Naz вне форума Посмотреть профиль Отправить личное сообщение для SpetZ_Naz Найти все сообщения от SpetZ_Naz
  № 7  
Ответить с цитированием
SpetZ_Naz

Регистрация: Aug 2012
Сообщений: 77
Цитата:
BitmapData.getColorBoundsRect вам не поможет?
Незнаю как его к коду применить, я новичок, да и пока что хочется по своему методу реализовать, пускай он и не рациональный.
Цитата:
А вообще можно попробовать цикл поменять чуток:
Цитата:
переменная bm не определена
Не помогает... Дело в том, что условие не работает или цикл не прошаривает по области 200 на 200:
Код AS3:
              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)
					}
				}
			}
Вроде все логично написал и должно было заработать..(
Цитата:
Ух ты, а как такое скомпилировалось?
Код AS3:
var child:Shape = new Shape();		
var bmd:BitmapData = new BitmapData (200, 200);
Да без проблем скомпилировалось, не понимаю, что Вас смущает.
Цитата:
Где модификаторы доступа?
По умолчанию конечно же public, видны в любом месте кода, не суть важно.
Цитата:
можно просто:
Можно, но тоже не суть важно.
Цитата:
Координаты всех какого-то цвета пикселей нужны?
В данном случае я ищу черные пиксели нанесенные мышкой и как только кнопка мыши отпускается, должен сработать поиск этих пикселей.

Всем спасибо. Проблема осталось не решенной, цикл не ищет пиксели.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
В качестве предположения. Сделайте толщину линий 10, чисто для теста.
Я допускаю, что черных пикселей просто нет. Тонкие линии сглаживаются, битмапдата изначально белая, и черный цвет при сглаживании смешивается с белым, так что значения 0х000000 может реально не быть на рисунке.
__________________
Reality.getBounds(this);

Старый 02.11.2012, 00:09
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 9  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Код AS3:
             for (var i:uint; i<bmd.width; i++){
				for (var j:uint; j<bmd.height; j++){
Ваш код полностью эквивалентент коду
Код AS3:
var i:unit = 0;
var j:uint = 0;
for (;i < bmd.width; i++)
  for (;j < bmd.height; j++) {
И внутренний цикл выполняется ровно один раз. Устанавливайте начальные значения переменным в заголовке цикла. И вообще, избегайте декларации переменных без их инициализации в той же строке.

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

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
то о чем я говорил, попробуйте:
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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