Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как сделать зеркальную копию изображения в BitmapData? (http://www.flasher.ru/forum/showthread.php?t=128157)

Cybo 31.07.2009 18:03

Как сделать зеркальную копию изображения в BitmapData?
 
Собственно задача: Имеем спрайт содержащий изображение. Нужно скопировать правую половину этого изображения и отзеркалить её в новом BitmapData, ширина которого, должна быть равна ширине копируемой области. Ну вот как такое сделать?

Venya2007 31.07.2009 18:18

newData.copyPixels(sourceData,new Rectangle(sourceData.width/2,0,sourceData.width/2,sourceData.height))
Потом проскейлить контейнер

Волгоградец 31.07.2009 18:43

Можно сразу в битмапу копировать в масштабе:
Код AS3:

var bmp:BitmapData = new BitmapData(dispObj.width / 2, dispObj.height, true, 0x000000);
var matrix:Matrix = new Matrix(-1, 0, 0, 1, dispObj.width, 0);
bmp.draw(dispObj, matrix, null, null, new Rectangle(0, 0, dispObj.width / 2, dispObj.height));

При условии что точка регистрации спрайта - верхний левый угол.

Герыч 31.07.2009 19:19

Что такое точка регистрации спарайта??

ramshteks 31.07.2009 19:30

имелся ввиду центр локальной системы координат спрайта

Cybo 31.07.2009 21:35

О! Спасибо!

Добавлено через 4 минуты
Цитата:

Сообщение от Волгоградец (Сообщение 839633)
Код AS3:

var bmp:BitmapData = new BitmapData(dispObj.width / 2, dispObj.height, true, 0x000000);
var matrix:Matrix = new Matrix(-1, 0, 0, 1, dispObj.width, 0);
bmp.draw(dispObj, matrix, null, null, new Rectangle(0, 0, dispObj.width / 2, dispObj.height));


Такой вариант не пойдёт, так как draw(....new Rectangle(0, 0, dispObj.width / 2, dispObj.height)) - сделает снимок левой половинки потому-что Rectangle(0, 0,...

Добавлено через 6 минут
Цитата:

Сообщение от Venya2007 (Сообщение 839623)
Потом проскейлить контейнер

Это что означает (просклеить)?

AL.exe 01.08.2009 01:07

Код AS3:

DisplayObject.scaleX *=-1


Cybo 01.08.2009 12:45

Проблема не в том, чтобы сделать зеркало, а в том, что нужно взять определённую область и отзеркалить.

Волгоградец 01.08.2009 13:28

Цитата:

Сообщение от Cybo (Сообщение 839660)
Такой вариант не пойдёт, так как draw(....new Rectangle(0, 0, dispObj.width / 2, dispObj.height)) - сделает снимок левой половинки потому-что Rectangle(0, 0,...

Поэтому сначала применяется матрица трансформаций, которая зеркалит спрайт. Тогда Rectangle(0, 0,... дает правую сторону. Проверил бы сначала.

Cybo 01.08.2009 13:33

ааааааааааа, действительно! Не приметил... спасибо - это классная идея!!!!


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

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