![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2013
Сообщений: 18
|
Доброго времени суток! Помогите разобраться, я получаю изображение в виде ByteArray, мне нужно сделать его ресайз, нашел пример как это делается через BitmapData, сделал следующую функцию:
function resize(images:ByteArray, h:int, w:int):ByteArray{ var loader:Loader = new Loader(); var newImg:BitmapData = new BitmapData(w, h); loader.loadBytes(images); newImg.draw(loader); var newJpeg:ByteArray = new JPEGEncoder(90).encode(newImg); return newJpeg; } Итог белый квадрат 200X200! Вы меня конечно извините может я что-то криво написал (я с AS на ВЫ), помогите разобраться где ошибки! Последний раз редактировалось iNils; 30.05.2013 в 01:26. |
|
|||||
|
Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
|
Прежде чем делать draw, необходимо дождаться окончания загрузки loader
__________________
FlashPress.ru | Blog |
|
|||||
|
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Ресайз изображения:
package { import flash.display.BitmapData; import flash.geom.Matrix; public class BitmapResize { private static const IDEAL_RESIZE_PERCENT:Number = .5; public function BitmapResize() { } public static function resizeImage(source:BitmapData, width:Number, height:Number, constrainProportions:Boolean = true):BitmapData { var scaleX:Number = width/source.width; var scaleY:Number = height/source.height; if (constrainProportions) { if (scaleX > scaleY) scaleX = scaleY; else scaleY = scaleX; } var bitmapData:BitmapData = source; if (scaleX >= 1 && scaleY >= 1) { bitmapData = new BitmapData(Math.ceil(source.width*scaleX), Math.ceil(source.height*scaleY), true, 0); bitmapData.draw(source, new Matrix(scaleX, 0, 0, scaleY), null, null, null, true); return bitmapData; } // scale it by the IDEAL for best quality var nextScaleX:Number = scaleX; var nextScaleY:Number = scaleY; while (nextScaleX < 1) nextScaleX /= IDEAL_RESIZE_PERCENT; while (nextScaleY < 1) nextScaleY /= IDEAL_RESIZE_PERCENT; if (scaleX < IDEAL_RESIZE_PERCENT) nextScaleX *= IDEAL_RESIZE_PERCENT; if (scaleY < IDEAL_RESIZE_PERCENT) nextScaleY *= IDEAL_RESIZE_PERCENT; var temp:BitmapData = new BitmapData(bitmapData.width*nextScaleX, bitmapData.height*nextScaleY, true, 0); temp.draw(bitmapData, new Matrix(nextScaleX, 0, 0, nextScaleY), null, null, null, true); bitmapData = temp; nextScaleX *= IDEAL_RESIZE_PERCENT; nextScaleY *= IDEAL_RESIZE_PERCENT; while (nextScaleX >= scaleX || nextScaleY >= scaleY) { var actualScaleX:Number = nextScaleX >= scaleX ? IDEAL_RESIZE_PERCENT : 1; var actualScaleY:Number = nextScaleY >= scaleY ? IDEAL_RESIZE_PERCENT : 1; temp = new BitmapData(bitmapData.width*actualScaleX, bitmapData.height*actualScaleY, true, 0); temp.draw(bitmapData, new Matrix(actualScaleX, 0, 0, actualScaleY), null, null, null, true); bitmapData.dispose(); nextScaleX *= IDEAL_RESIZE_PERCENT; nextScaleY *= IDEAL_RESIZE_PERCENT; bitmapData = temp; } return bitmapData; } } } |
|
|||||
|
Регистрация: Sep 2003
Сообщений: 28
|
На лоадер нужно слушатель повесить и вытаскивать изображение через параметр content лоадера.
var loader:Loader; var image:ByteArray = imgList[i].img; var newImg:BitmapData = new BitmapData(w, h); var img:ByteArray; resize(image); function resize(images:ByteArray):ByteArray { loader = new Loader(); loader.addEventListener(Event.COMPLETE, onLoaderComplete); loader.loadBytes(images); } function onLoaderComplete(event:Event):void { newImg.draw(loader.content as Bitmap); img = new JPEGEncoder(90).encode(newImg); } |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 18
|
WisP, Функция onLoaderComplete не выполняется?
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 18
|
trace(img) возвращает null
|
|
|||||
|
Banned
[+5 04.06.13]
[+1 08.06.13] Регистрация: May 2013
Сообщений: 52
|
Вы же загружаете ByteArray, кажется? А потом вдруг делаете loader.content as Bitmap. Так, кажется, нельзя. Нет?
|
|
|||||
|
Регистрация: Apr 2013
Сообщений: 18
|
Вот таким образом:
var loadIm:Loader; resizIm(image); function resizIm(im:ByteArray):void{ loadIm = new Loader(); loadIm.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete); loadIm.loadBytes(im); } function onLoaderComplete(event:Event):void{ var newImg:BitmapData = new BitmapData(200, 200); var img:ByteArray; newImg.draw(loadIm.content as Bitmap); img = new JPEGEncoder(90).encode(newImg); trace (img); } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вызвать функцию, которая должна с ним работать,
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:58. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|