изображение обрезается согласно максимальными значениям ширины или выс

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/**
* изображение обрезается согласно максимальными значениям ширины и/или высоты
* @param bmd - исходное изображение
* @param maxW - максимальная ширина изображения
* @param maxH - максимальная высота изображения
* @param isHard - если true, то размеры изображения жестко подгоняются под максимальные значения (в этом случае значения maxW и maxH должны быть заданы и значение isStretch по-умлочанию true)
* @param isStretch - если true, то маленькая картинка растягивается под максимальные значения
* @return результирующее изображение
***/
public static function sizeBySides(bmd:BitmapData, maxW:Number = 0, maxH:Number = 0, isHard:Boolean = false, isStretch:Boolean = false):BitmapData {
// максимальные значения сторон не заданы
if ((maxW <= 0) && (maxH <= 0))
return bmd;
var scByWidth:Number; //масштаб по ширине
var scByHeight:Number; //масштаб по высоте
var newBMD:BitmapData;
// если заданы максимальные значения обоих сторон
if (maxW > 0 && maxH > 0){
scByWidth = maxW / bmd.width;
scByHeight = maxH / bmd.height;
if (isHard){ //задаем изображению размеры (maxW x maxH) без искажения изображения
// по бОльшему масштабу изменяем размеры, после чего обрезаем ту сторону по которой масштаб был меньше.
if (scByWidth >= scByHeight){
newBMD = scaleBmd(bmd, scByWidth);
newBMD = pieceOfBmd(newBMD, 0, 0, newBMD.width, maxH);
return newBMD;
} else {
newBMD = scaleBmd(bmd, scByHeight);
newBMD = pieceOfBmd(newBMD, 0, 0, maxW, newBMD.height);
return newBMD;
}
} else { //засовываем изображение в рамку размером (maxW x maxH)
// по мЕньшему масштабу изменяем размеры, если Меньший масштаб>1, то проверяем на isStretch
var minScale:Number = Math.min(scByWidth, scByHeight);
if ((minScale > 1) && !isStretch)
return bmd;
else
return scaleBmd(bmd, minScale);
}
}
// дана только одна из сторон
else {
if (maxW >= maxH){ //задана только максимальная ширина
scByWidth = maxW / bmd.width;
if ((scByWidth > 1) && !isStretch)
return bmd;
else
return scaleBmd(bmd, scByWidth);
} else { // задана только максимальная высота
scByHeight = maxH / bmd.height;
if ((scByHeight > 1) && !isStretch)
return bmd;
else
return scaleBmd(bmd, scByHeight);
}
}
}
/*
* Масштабируется изображение
* */
public static function scaleBmd(bmd:BitmapData, scale:Number):BitmapData {
var tempBmd:BitmapData = new BitmapData(Math.round(bmd.width * scale), Math.round(bmd.height * scale));
var mtrx:Matrix = new Matrix(scale, 0, 0, scale);
tempBmd.draw(bmd, mtrx);
return tempBmd;
}
/*
* Вырезается кусок изображения
* */
public static function pieceOfBmd(bmd:BitmapData, _x:uint, _y:uint, _w:uint, _h:uint, scale:Number = 1):BitmapData {
var mtrx:Matrix = new Matrix(1, 0, 0, 1, -_x, -_y);
var tempBmd:BitmapData = new BitmapData(_w, _h);
tempBmd.draw(bmd, mtrx);
if (scale == 1){
return tempBmd;
} else {
var bmdScale:BitmapData = scaleBmd(tempBmd, scale);
tempBmd.dispose();
return bmdScale;
}
}