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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.07.2014, 12:06
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 11  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
Сообщение от faraday Посмотреть сообщение
nubideus, спасибо, copyPixels работает и правда куда быстрее. Остался только непонятным момент с использвоанием матричных преобразований? зачем они тут нужны, разницы без них не заметил..
в матрицах только отступы.

например круг может лежать на (0, 0), и из-за этого в растр срисуется только четверть круга. getBounds и матрицы с tx и ty(отступы) позволяют рисовать круг полностью.
Название: Снимок.PNG
Просмотров: 323

Размер: 18.9 Кб (правая и нижная части квадратика отрезаны)
Код AS3:
			var maskRect:Rectangle = new Rectangle(0, 0, mask.width, mask.height);
			var region:BitmapData = new BitmapData(maskRect.width, maskRect.height, true, 0); // результат
			region.draw(mask);
 
			region.copyPixels(background, maskRect, new Point(), region, new Point()); // copyPixels умеет маску
			this.addChild(new Bitmap(region));
если у тебя все фигуры ровно расположены, то можешь и без матриц.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Можно не заморачиваться с вычислением матрицы самому, а взять ее прямо у этой маски, то есть так:
Код AS3:
region.draw(mask, mask.transform.matrix);
__________________
Ко мне можно и нужно обращаться на ты)

Старый 14.07.2014, 17:23
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 13  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
caseyryan, нельзя

Старый 14.07.2014, 22:06
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 14  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от nubideus Посмотреть сообщение
caseyryan, нельзя
Почему? Самому в лом проверять.
Я всегда так делаю, и все работает без проблем
__________________
Ко мне можно и нужно обращаться на ты)

Старый 15.07.2014, 00:25
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 15  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Почему? Самому в лом проверять.
Я всегда так делаю, и все работает без проблем
видимо ты только с растром это делал.

должно быть так:
(Вложение 31019)
в твоем случае так:
(Вложение 31026)
т.е. в конкретном случае сдвиг на 10 пикселей

Старый 15.07.2014, 09:07
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 16  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
видимо ты только с растром это делал.
Причем здесь растр?

Немного не понятно. Можешь объяснить для чего все эти телодвижения с матрицами, с еще одной битмапдатой? Как по мне, так это походит на костыль, в котором трудно разобраться. Весь этот код можно упростить до такого
Код AS3:
var mask:Shape = new Shape();
var gradientMatrix:Matrix = new Matrix();
gradientMatrix.createGradientBox(100, 100);
mask.graphics.beginGradientFill(GradientType.LINEAR, [0xFFFFFF, 0xFFFFF], [0x00, 0xFF], [0, 255], gradientMatrix);
mask.graphics.drawCircle(50, 50, 40);
mask.graphics.drawRect(70, 70, 30, 30);
 
var background:BitmapData = new BitmapData(100, 100, true, 0); 
background.noise(0);
var maskBitmap:BitmapData = new BitmapData(background.width, background.height, true, 0); 
maskBitmap.draw(mask);
maskBitmap.copyPixels(background, new Rectangle(0, 0, 100, 100), new Point(), maskBitmap, new Point()); // copyPixels умеет маску
addChild(new Bitmap(maskBitmap));
И получим тот же результат Или я какой-то скрытый смысл не уловил?
Изображения
 
__________________
Ко мне можно и нужно обращаться на ты)

Старый 15.07.2014, 11:55
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 17  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
я какой-то скрытый смысл не уловил?
определенно
Цитата:
Код AS3:
var maskBitmap:BitmapData = new BitmapData(background.width, background.height
Цитата:
имеется растровая карта 4к*4к

Цитата:
Причем здесь растр?
ну с растром не надо учитывать точку регистрации

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
ну с растром не надо учитывать точку регистрации
Теперь понял, о чем ты
Цитата:
определенно
Код AS3:
var maskBitmap:BitmapData = new BitmapData(background.width, background.height
Ну это для примера. Туда можно и другие числа вписать
__________________
Ко мне можно и нужно обращаться на ты)

Старый 15.07.2014, 12:32
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 19  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
caseyryan, к тому же я уже показал код без матриц. там надо что бы маски были выровнены. http://www.flasher.ru/forum/showpost...6&postcount=11

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

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

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


 


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


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