获取位图的字节数

时间:2013-08-19 16:01:27

标签: actionscript-3 flash actionscript

目标是从位图显示jpeg编码的进度。我有几个需要编码的位图。所以我得到的总字节数为suggested here

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

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

然后我试图在进行异步编码时显示进度。我得到一个ProgressEvent,它给了我bytesLoaded。所以我像这样计算进度:

total_loaded_bytes += event.bytesLoaded;

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

但是,total_bytes加起来不是total_loaded_bytes。加载的总字节数更高。

1 个答案:

答案 0 :(得分:0)

使用bytesLoaded属性的错误方法。这不是简单地加起来,因为它包含发出事件的Loader对象的已加载字节总数。获取总字节数的方法也是错误的,你需要在progress事件监听器中使用event.bytesTotal,因为你要加载字节而不是像素。即使您上传。此外,对于异步编码,确切的进度可能完全不可用,您只显示上载/下载进度。

更新:要获得累积进度,请执行以下操作:

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
}