2013-08-19 3 views
0

Цель состоит в том, чтобы показать прогресс кодирования jpeg из растрового изображения. У меня есть несколько растровых изображений, которые необходимо закодировать. Таким образом, я получаю общее число байтов, как это было suggested here:Получение количества байтов растрового изображения

for (var i:int = 0; i < bitmaps.length; i++) 
{ 
    bmp = bitmaps[i]; 

    total_bytes += bmp.getPixels(bmp.rect).length; 
} 

Тогда я пытаюсь показать прогресс при выполнении asychronous кодирования. Я получаю ProgressEvent, который дает мне bytesLoaded. Таким образом, я вычисляю прогресс так:

total_loaded_bytes += event.bytesLoaded; 

var percentage:int = ((total_loaded_bytes/total_bytes) * 100); 

Однако total_bytes не добавляет к total_loaded_bytes. Максимальное количество загруженных байтов.

+1

Почему вы не используете 'event.bytesTotal' вместо' total_bytes'? – putvande

+0

'event.bytesTotal' предназначен только для определенного изображения, которое в настоящее время кодируется. У меня есть несколько изображений. Поэтому мне нужно получить общий размер изображений, суммировать общее количество загружаемых и делить то, что загружено итогом. –

ответ

0

Неправильный подход к использованию bytesLoaded. Это не должно быть легко добавлено, так как в нем содержится общее количество уже загруженных байтов bu 0 Loader объект, выдавший событие. И неправильный подход к получению общих байтов тоже, вы должны использовать event.bytesTotal из прослушивателя событий прогресса, так как вы загружаете байты, а не пиксели. Даже если вы закачка. Кроме того, точный прогресс может быть совершенно недоступен для асинхронного кодирования, вы только показываете ход загрузки/загрузки.

Update: получить накопленный прогресс, сделать что-то вроде этого:

var loaders:Array=[]; // array of loaders. Fill manually 
var progress:Array=[]; // fill with zeroes alongside loaders, should be same size 
function updateProgress(e:ProgressEvent):void { 
    var loader:Loader=e.target as Loader; 
    if (!loader) return; // or skip type coercion, we just need the reference 
    var i:int=loaders.indexOf(loader); // now get an index from array 
    if (i<0) return; // not found, drop it 
    progress[i]=e.bytesLoaded; // and update progress array with new value 
    // now sum up progress array and divide by aggregated bytesTotal 
    // this one is up to you 
} 
+0

'event.bytesTotal' предназначен только для определенного изображения, которое в настоящее время кодируется. У меня есть несколько изображений. Поэтому мне нужно получить общий размер изображений, суммировать общее количество загружаемых и делить то, что загружено итогом. –

+0

Да, правильно, для этого вам нужно отслеживать все объекты-загрузчики, записывать их 'bytesLoaded' в массиве int, соответствующих загрузчикам, и суммировать это. См. Обновление. – Vesper

+0

Я суммировал 'e.bytesLoaded' для каждого объекта нагрузки' total_loaded_bytes + = event.bytesLoaded'. Зачем мне нужно положить bytesLoaded в массив 'progress'? –

Смежные вопросы