Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.05.2013, 00:28
Makkssimka вне форума Посмотреть профиль Отправить личное сообщение для Makkssimka Найти все сообщения от Makkssimka
  № 1  
Ответить с цитированием
Makkssimka

Регистрация: Apr 2013
Сообщений: 18
По умолчанию Ресайз изображения

Доброго времени суток! Помогите разобраться, я получаю изображение в виде ByteArray, мне нужно сделать его ресайз, нашел пример как это делается через BitmapData, сделал следующую функцию:
Код AS3:
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;
}
И вызвал ее:
Код AS3:
var image:ByteArray = imgList[i].img;
var img:ByteArray = resize(image, 200, 200);
Итог белый квадрат 200X200! Вы меня конечно извините может я что-то криво написал (я с AS на ВЫ), помогите разобраться где ошибки!


Последний раз редактировалось iNils; 30.05.2013 в 01:26.
Старый 30.05.2013, 00:39
maincode вне форума Посмотреть профиль Отправить личное сообщение для maincode Посетить домашнюю страницу maincode Найти все сообщения от maincode
  № 2  
Ответить с цитированием
maincode

Регистрация: Feb 2010
Адрес: Город суеты
Сообщений: 191
Прежде чем делать draw, необходимо дождаться окончания загрузки loader
__________________
FlashPress.ru | Blog

Старый 30.05.2013, 00:44
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 3  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
Ресайз изображения:
Код AS3:
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;
}
 
 
 
	}
}

Старый 30.05.2013, 00:47
WisP вне форума Посмотреть профиль Отправить личное сообщение для WisP Найти все сообщения от WisP
  № 4  
Ответить с цитированием
WisP

Регистрация: Sep 2003
Сообщений: 28
На лоадер нужно слушатель повесить и вытаскивать изображение через параметр content лоадера.
Код AS3:
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);
}
Код не проверял, но смысл должен быть ясен.

Старый 30.05.2013, 16:11
Makkssimka вне форума Посмотреть профиль Отправить личное сообщение для Makkssimka Найти все сообщения от Makkssimka
  № 5  
Ответить с цитированием
Makkssimka

Регистрация: Apr 2013
Сообщений: 18
WisP, Функция onLoaderComplete не выполняется?

Старый 30.05.2013, 17:19
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
__________________
Reality.getBounds(this);

Старый 30.05.2013, 18:09
Makkssimka вне форума Посмотреть профиль Отправить личное сообщение для Makkssimka Найти все сообщения от Makkssimka
  № 7  
Ответить с цитированием
Makkssimka

Регистрация: Apr 2013
Сообщений: 18
trace(img) возвращает null

Старый 30.05.2013, 18:18
Final Hope вне форума Посмотреть профиль Найти все сообщения от Final Hope
  № 8  
Ответить с цитированием
Final Hope
Banned
[+5 04.06.13]
[+1 08.06.13]

Регистрация: May 2013
Сообщений: 52
Вы же загружаете ByteArray, кажется? А потом вдруг делаете loader.content as Bitmap. Так, кажется, нельзя. Нет?

Старый 30.05.2013, 18:21
Makkssimka вне форума Посмотреть профиль Отправить личное сообщение для Makkssimka Найти все сообщения от Makkssimka
  № 9  
Ответить с цитированием
Makkssimka

Регистрация: Apr 2013
Сообщений: 18
Вот таким образом:

Код AS3:
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);
					}
trace выводит все нормально, но как img достать из функции?

Старый 30.05.2013, 19:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вызвать функцию, которая должна с ним работать, из того места в то ВРЕМЯ, когда он точно есть, то есть из onLoaderComplete.
__________________
Reality.getBounds(this);

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:44.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.