Я давно использую эту функцию для изменения размера изображения с сохранением соотношения сторон:
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;