ActionScript 3: изменение размера изображения внутри UIComponent - PullRequest
1 голос
/ 26 августа 2011

У меня есть UIComponent и внутри него я помещаю загрузчик (который загружает файл изображения).

ПРОБЛЕМА: Даже если я изменю размер UIComponent (до квадрата), он все равно будет соответствовать размеру изображения в загрузчике. Но когда я изменю размер изображения в загрузчике, оно будет растягиваться. То, что я хочу сделать, это иметь контейнер (UIComponent), который имеет фиксированный квадратный размер, и после загрузки изображения он будет просто соответствовать размеру контейнера без растяжения. Кто-нибудь может мне помочь, как это сделать?

Ответы [ 2 ]

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

Я давно использую эту функцию для изменения размера изображения с сохранением соотношения сторон:

public function constraintResize(iSourceWidth:*, iSourceHeight:*, iTargetWidth:*, iTargetHeight:*, iFitSmallerDimension:*):* {
  if (iFitSmallerDimension == undefined) iFitSmallerDimension = false;
  if (iTargetWidth == 0 || iTargetHeight == 0) return;
  if (iSourceWidth == 0 || iSourceHeight == 0) return;

  var newWidth:*;
  var newHeight:*;
  var targetRatio:*;
  var sourceRatio:*;

  var output:* = { width:iSourceWidth, height:iSourceHeight };

  if (iSourceWidth <= iTargetWidth && iSourceHeight <= iTargetHeight) {
    if (iFitSmallerDimension) {
      targetRatio = iTargetWidth / iTargetHeight;
      sourceRatio = iSourceWidth / iSourceHeight;
      if (sourceRatio < targetRatio) {
        newHeight = iTargetHeight;
        newWidth = newHeight * sourceRatio;
      } else {
        newWidth = iTargetWidth;
        newHeight = newWidth / sourceRatio;
      } 
      output.width = newWidth
      output.height = newHeight
    }

    } else {

    targetRatio = iTargetWidth / iTargetHeight
    sourceRatio = iSourceWidth / iSourceHeight
    if (sourceRatio < targetRatio) {
      newHeight = iTargetHeight
      newWidth = newHeight * sourceRatio
    } else {
      newWidth = iTargetWidth
      newHeight = newWidth / sourceRatio
    }

    output.width = newWidth
    output.height = newHeight
  }

  return output
}       

Функция даст вам идеальные размеры, чтобы соответствовать source в target.Так что, в вашем случае, вы можете использовать его так:

var s:* = constraintResize(loader.contentWidth, loader.contentHeight, yourSquare.width, yourSquare.height);
loader.width = s.width;
loader.height = s.height;
1 голос
/ 26 августа 2011

используйте компонент UILoader и установите scaleContent = true в wondow инспектора компонентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...