Показать сообщение отдельно
Старый 25.07.2011, 23:13
sweet_fighter вне форума Посмотреть профиль Отправить личное сообщение для sweet_fighter Найти все сообщения от sweet_fighter
  № 1  
Ответить с цитированием
sweet_fighter
 
Аватар для sweet_fighter

Регистрация: Apr 2008
Адрес: Kiev, Ukraine
Сообщений: 43
Отправить сообщение для sweet_fighter с помощью ICQ
По умолчанию Пропорциональное изменение размера BitmapData

Предисловие: Пользователь загружает картинку, любого размера, я ее принимаю, и предлагаю выбрать нужный квадрат для аватарки.
1. Пользователь загрузил. (bitmap)
2. Я ее уменьшил до пропорциональных размеров (bitmap.x, bitmap.y)
3. Предоставляю пользователю квадрат, который он может двигать по картинке, что бы выбрать лучшее + дублирую выбранную область.(как на картинке, где 2 это загруженная картинка, а 1 это предпросмотр вырезанной)
[IMG]http://i.***********/i5/55/83/1778355/Zapysaty.png[/IMG]
Проблема: При загрузке предпросмотра, я копирую(BitmapData) область под квадратом с оригинальным изображением, но копирование идет не с уменьшенного изображения с пункта(2), а оригинал(2345*1234px) который загрузил пользователь.
Долго бился, потом вспомнил про Matrix. Но как матрицей с ее скейлами уменьшить предпросмотр(1) до такого же размера, что и загруженая картинка(2), ведь пользователи загружают картинки с разными размерами.
Фух.. Помогите пжлста. Может кто что делал похожее. Я запутался.

Код AS3:
_bitmap = Bitmap(e.target.content); //оригинальная картинка
 
_bitmap.width = resizeW(_bitmap.width, _bitmap.height);
_bitmap.height = resizeH(_bitmap.width, _bitmap.height);//Изменили пропорционально размеры
 
 
var bmd:BitmapData = new BitmapData(_bitmap.width, _bitmap.height, true, 0x00000000); //Дублируем для превью
var bmd2:BitmapData = new BitmapData(69, 69);
bmd.draw(_bitmap, mat, null, null, null, true); //mat - матрица со скейлами (scaleX, scaleY)
 
var rect:Rectangle = new Rectangle(0, 0, 69, 69); //69*69 - размер превью-квадрата
var pt:Point = new Point(0, 0);
bmd2.copyPixels(bmd, rect, pt);
 
var bmp:Bitmap = new Bitmap(bmd2);
addChild(bmp);