Как масштабировать и обрезать BitmapImage во Flex 4.5 - PullRequest
3 голосов
/ 29 августа 2011

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

  1. Я хочу, чтобы все мои плитки были, скажем, 300px x 300px.

  2. Для каждого изображения,Я хочу масштабировать более короткую сторону (ширину или высоту), чтобы уместить ее в плитке, используя масштабируемый режим «почтовый ящик» (чтобы он сохранял соотношение сторон).изображение в центре и удалите все, что осталось с обеих сторон или сверху и снизу.

Вот пример, который поможет уточнить:

  • Iиметь изображение с шириной = 600 пикселей и высотой = 1200 пикселей.Сначала я хочу масштабировать изображение до ширины = 300 пикселей и высоты = 600 пикселей (обратите внимание, что соотношение сторон сохраняется), затем отцентрировать изображение по вертикали и обрезать изображение до размера 300 x 300.

Возможно ли это?На самом деле это довольно стандартный способ отображения квадратных эскизов на многих веб-сайтах с фотографиями, но я не могу найти способ заставить его работать во флексах.

Любая помощь будет признательна, спасибо!

ОБНОВЛЕНИЕ ИЮНЬ 2012 :

На всякий случай, если кто-нибудь найдет эту тему сейчас, эта проблема была решена в последней версии Flex SDK.На объекте изображения искры есть новый scaleMode "zoom", который делает именно то, что я просил здесь.

1 Ответ

2 голосов
/ 29 августа 2011

Возьмите свое большое изображение и нарисуйте его на BitmapData с масштабом и репозицией:

const zoom:Number = Math.max(THUMB_WIDTH/image.width, THUMB_HEIGHT/image.height);
const x:int = (THUMB_WIDTH - image.width*zoom)/2;
const y:int = (THUMB_HEIGHT - image.height*zoom)/2;
var matrix:Matrix = new Matrix;
matrix.scale(zoom, zoom);
matrix.translate(x, y);

var _thumbBitmap:BitmapData = new BitmapData(THUMB_WIDTH, THUMB_HEIGHT, false, 0xFFFFFF);
_thumbBitmap.draw(image, matrix, null, null, null, true);

Затем присвойте полученный BitmapData источнику BitmapImage.

Подробнее: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#draw%28%29 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/primitives/BitmapImage.html#source

...