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

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

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

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
По умолчанию Как вырезать bitmapdata с rotation

Привет.

Есть у меня Bitmap1 внитри Sprite MCBMP,

Bitmap1 поворачиваю на любой градус и центрую.

есть поверх Sprite еще и один прямоугольник rect1 130x520


надо Составить Matrix так чтобы вырезать BitmapData от Bitmap по размерам Sprite(2) учитывая повороты


Код AS3:
var matrix:Matrix = new Matrix();
matrix.tx = rect.x 
matrix.ty = rect.y 
matrix.rotate(Bitmap1.rotation);
 
 
var bdata:BitmapData = new BitmapData(130, 520, true,  Utils.BLUE_BK_COL);
bdata.draw(MCBMP,matrix, null, null, new Rectangle(0, 0, 130, 520), true);
белеберда получается(
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 03.07.2011, 21:55
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
bitmap.rotation в градусах, а matrix.rotate принимает радианы
может в этом дело

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

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Да! Точно... Почему так сделали?)спасибо! С поворотом разобрались...
еще вопрос:

Есть картинка 800x600
Вырезаем ее с помощью матрицы tx=100 ty=100 и все работает!
А вот если картинку повернуть на какой нибудь градус и к матрице добавить rotate угол в радианах - то tx и ty уже надо другие брать? Криво вырезает
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в терминах Matrix повернуть и потом сдвинуть != сдвинуть и потом повернуть

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

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Значит надо сдвинуть потом повернуть? Спасибо большое. Завтра посмотрим)
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 05.07.2011, 09:28
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 6  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Я делал при помощи pixelBounds. Только там веселуха, если обьект не добавлен в дисплей лист, то они ровно в 5 раз больше %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Ничего не вышло =(((( весь день возился(((

вообще надо просто умножить на sin или cos чего то там угла поворота... Но как именно?



или как применить pixelBounds??
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH

Старый 05.07.2011, 23:53
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Есть у меня Bitmap1 внитри Sprite MCBMP,
Bitmap1 поворачиваю на любой градус и центрую.
есть поверх Sprite еще и один прямоугольник rect1 130x520
надо Составить Matrix так чтобы вырезать BitmapData от Bitmap по размерам Sprite(2) учитывая повороты
к решению таких задач надо подходить осторожно, очень постепенно надо подходить
вот народ и осторожничает, потому как закаленных людей, что не боятся переломов мозга мало, нет их почти

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

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Похоже, занимались брутфорс программированием >_<
Поворачиваем спрайт на минус поворот битмапы, с помощью pixelBounds узнаем её размеры и положение, создаем её, может, рендерим в неё, потом поворачиваем обратно спрайт и битмапу (она до того какбэ не повёрнута).
Это если верно понял, что надо.
Сделайте проектик, где можно понять, что надо и чтоб можно было сделать там же (fla я не открою и не только я). Тогда если он нормальный, то пара строк написать всего надо будет (меньше блин, чем этот пост - точно).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Так)) ну попробую сюда вписать:

Код AS3:
 
//есть у нас лоадер который загружен через fileReferance
//и вытаскиваем из него картинку и вставляем на экран
 
var bmp:Bitmap =  loader.content as Bitmap;
 
// если мы просто добавим на экран bmp то при rotate - он будет поворачиваться от начала его координат
// а мне надо чтобы вращался вокруг своейго цента и поэтому я решил создать Sprite и вставить в него bmp
 
var sprite: Sprite = new Sprite();
bmp.x=-bmp.width/2;
bmp.y=-bmp.height/2;
sprite.addChild(bmp);
this.addChild(sprite);
//на sprite вещаем listeners на перемещение зажимая мышкой чтобы перемещать туда сюда...
// это сейчас не суть и поэтому упустим этот бытовой стандартный код
 
// теперь нарисуем поверх всего прямоугольник , который означает служит маской вырезания изображения
var rect:Sprite=new Sprite();
rect.graphics.lineStyle(1,0xff0000);
rect.graphics.drawRect(0,0,130,520);
rect.x=srite.width/2-rect.width/2;
rect.y=sprite.height/2-rect.height/2;// расположили в центре картинки
this.addChild(rect);
 
 
/// теперь эксперементы...
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
 
var matrix:Matrix=new Matrix();
matrix.tx=-sprite.width/2 +rect.x- sprite.x;
matrix.ty=-sprite.height/2+rect.y-sprite.y;
 
//создаем bitmapData и вырезаем в него кусок из картинки bmp маской rect у которого размеры 130x520
 
var bdata:BitmapData = new BitmapData(130, 520, true,  0xffffff);
bdata.draw(bmp,matrix, null, null, new Rectangle(0, 0, 130, 520), true);
// вырезается все нормально и правильно
 
//----------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
///-----------------------------------------------
 
// а теперь тоже самое но с повернутой картинкой !!!!!!!!!!!!!!!!!!!!!!!!!!
sprite.rotation=90;
 
 
var matrix:Matrix=new Matrix();
matrix.tx=-sprite.width/2 +rect.x- sprite.x;
matrix.ty=-sprite.height/2+rect.y-sprite.y;
matrix.rotate(sprite.rotation*180/Math.PI) // и в матрице делаем поворот , только перевели в радианы
 
//создаем bitmapData и вырезаем в него кусок из картинки bmp маской rect у которого размеры 130x520
 
var bdata:BitmapData = new BitmapData(130, 520, true,  0xffffff);
bdata.draw(bmp,matrix, null, null, new Rectangle(0, 0, 130, 520), true);
// вырезается криво!!!!! Угол поворота задан верно, но tx и ty сбиваются :-(


P.s.
Писал с ipad, могу быть орфаграфические ошибки
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH


Последний раз редактировалось Azo; 06.07.2011 в 03:06.
Создать новую тему Ответ Часовой пояс GMT +4, время: 08:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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