Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Недопустимые данные BitmapData (http://www.flasher.ru/forum/showthread.php?t=122108)

motoroller 02.03.2009 20:47

Недопустимые данные 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()

ramshteks 02.03.2009 20:50

скорее всего недопустимые данные это слишком большой размер битмапДаты

motoroller 02.03.2009 20:56

Но я же делаю ресайз, картинки перед этим?

Добавлено через 1 минуту
и что никак нельзя это победить?
ну сделано же как-то в контакте и не важно какого размера ты офтки туда грузишь ....

ramshteks 02.03.2009 21:49

посмотри спецификацию битмапдаты повнимательней на предмет ограничений и проследи, какие именно данные поступают в конструктор битмап даты, так ты узреешь истину! :)

motoroller 02.03.2009 22:13

А подскажешь как проследить
делаю trace(btm);

он всё время выводит [object Bitmap]

Добавлено через 6 минут
вот поять примерчик нашёл:
прекрасно работающий

incoob 03.03.2009 13:45

задаются либо слишком большие, либо слишком малые(=0) размеры
поэтому такое исключение и валится

про ограничение на размер bitmap писалось на форуме

TERRORist 03.03.2009 15:18

2880*2880 для FP9
4096*4096 для FP10

motoroller 03.03.2009 15:44

Уважаемые участники форума хочу Вам возразить, мой код загружает фотки с разрешением: 4272*2848
причём в один запус крпограммы он может все фотки прогрузить без проблем, а в лдругой раз споткнуться на 10, а в третий раз споткнуться на 30.
Так что не думаю чт опроблема в этом, плюс, опять же загрущик в контакте не имеет таковых ораничений, я там загружал фотки таких же размеров.

ramshteks 03.03.2009 18:20

не не не!
тут как раз таки такая фишка... загрузить загрузит! и отобразит больших размеров!
но как только ты начинаешь создавать bitmapdatу размеров больше выше изложеных появляется ошибка, уже было такое. послушай нас. проверь какие данные поступают в конструктор битмапдаты

TERRORist 03.03.2009 18:49

Цитата:

Сообщение от motoroller (Сообщение 802659)
Уважаемые участники форума хочу Вам возразить, мой код загружает фотки с разрешением: 4272*2848
причём в один запус крпограммы он может все фотки прогрузить без проблем, а в лдругой раз споткнуться на 10, а в третий раз споткнуться на 30.
Так что не думаю чт опроблема в этом, плюс, опять же загрущик в контакте не имеет таковых ораничений, я там загружал фотки таких же размеров.

4272*2848 сможет сконвертить в битмапдату только FP10. Без проблем предположительно.

http://www.bit-101.com/blog/wp-conte...h10bitmaps.png


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

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