Показать сообщение отдельно
Старый 02.03.2009, 20:47
motoroller вне форума Посмотреть профиль Отправить личное сообщение для motoroller Найти все сообщения от motoroller
  № 1  
Ответить с цитированием
motoroller

Регистрация: Jan 2006
Сообщений: 179
По умолчанию Недопустимые данные BitmapData

Делаю загрущик фото по типу в Контакте:\

Код AS3:
 
	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.net.FileFilter;
	import flash.net.FileReference;
	import flash.events.MouseEvent;
	import flash.events.Event;
    import fl.events.ListEvent;
	import fl.data.DataProvider;
 
 
// переменные
	var frl:FileReferenceList = new FileReferenceList();
	var currentFile:FileReference;
	var dp:DataProvider = new DataProvider(); 
	var currentFileNumber:uint;
	var bitmap:Bitmap;
	var totalAllowFiles:uint=50;
	var idFile:uint=0;
// переменные
 
 
	myTileList.setStyle("contentPadding", 5);
	myTileList.setRendererStyle("imagePadding", 10);
	myTileList.dataProvider = dp; 
 
	browseButt.addEventListener(MouseEvent.CLICK, browseFiles);
 
 
 
function browseFiles(event:MouseEvent):void {
	currentFileNumber=1;
	var imageTypes = new Array(new FileFilter("Изображения (*.jpg)", "*.jpg"));
    frl.browse(imageTypes); // browse files
	frl.addEventListener(Event.SELECT, onImageSelect);
}
 
function onImageSelect (event : Event):void { // при выборе картинок
	getFile();
}
 
function getFile() : void { // получение каждого файла из frl
	if(currentFileNumber<=frl.fileList.length && totalAllowFiles>0) {
		currentFile = FileReference(frl.fileList[currentFileNumber-1]);
		currentFile.load();
		currentFile.addEventListener(Event.COMPLETE, onDataLoaded);
	}
}
 
function onDataLoaded (event:Event):void { // при загрузке инфы из fr
	var loader:Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
	loader.loadBytes(event.target.data);
}
 
function onImageLoaded(event:Event):void { // доавбление картинкиn в bitmap
    var image:Bitmap = Bitmap(event.target.content);
	event.target.removeEventListener(Event.COMPLETE, onImageLoaded);
	var imageResize:Bitmap=resize(image, 150, 150);
	trace('после ресайз' + idFile);
	dp.addItem({source:imageResize, data:idFile}); // добавляем картинку в myTileList
	if(totalAllowFiles>0) { // груим дальше картинки если они есть в FileReference
		idFile++;
		totalAllowFiles--;
		currentFileNumber++;
		getFile();
	}
}
 
function resize(btm:Bitmap, width:Number, height:Number):Bitmap {
		trace('до ресайз' +  idFile);
		var size:Number = 1;
         var matrix:Matrix;
         var image:BitmapData;
 
            matrix = new Matrix();
            if (btm.width > width || btm.height > height) {
                size = Math.min(width / btm.width, height / btm.height);
                matrix.scale(size, size);
            }
 
			btm.smoothing = true;
            image = new BitmapData(btm.width * size, btm.height * size, true);
            image.draw(btm, matrix, null, null, null, true);
            return new Bitmap(image, PixelSnapping.AUTO, true);
}
в РАЗНЫХ СИТУАЦИЯ ( ПРИ БОЛЬШИХ ФОТО выдаёт таую ошибку:

ArgumentError: Error #2015: Недопустимые данные BitmapData.
at flash.display::BitmapData()
at upload2_fla::MainTimeline/resize()
at upload2_fla::MainTimeline/onImageLoaded()