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 인코딩을 수행 할 때 진행 상황을 보여주기 위해 노력하고있어. 나에게 bytesLoaded를주는 ProgressEvent을 얻는다. 그래서 난과 같이 진행 상황을 계산 :

total_loaded_bytes += event.bytesLoaded; 

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

그러나, total_bytestotal_loaded_bytes를 추가하지 않습니다. 로드 된 총 바이트 수는 훨씬 높습니다.

+1

: 같은 것을 할, 누적 진행을 받기? – putvande

+0

'event.bytesTotal'은 현재 인코딩 된 특정 이미지만을위한 것입니다. 나는 몇 장의 이미지가있다. 그래서 이미지의 전체 크기를 가져와 총로드를 합산하고 합계로로드 된 것을 나눠야합니다. –

답변

0

bytesLoaded 속성을 잘못 사용합니다. 이것은 이벤트를 발행 한 Loader 오브젝트의 이미로드 된 바이트의 합계를 포함하기 때문에 온화하게 추가해서는 안됩니다. 그리고 총 바이트 수에 대한 잘못된 접근법도 있습니다. 픽셀이 아닌 바이트를로드하기 때문에 progress 이벤트 리스너 내에서 event.bytesTotal을 사용해야합니다. 비록 당신이 를 업로드하는 경우에도. 또한 비동기 인코딩의 경우 정확히 진행되지 않을 수도 있습니다. 업로드/다운로드 진행 상황 만 표시됩니다.

업데이트 : 대신`total_bytes`의`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 
} 
+0

'event.bytesTotal'은 현재 인코딩 된 특정 이미지만을위한 것입니다. 나는 몇 장의 이미지가있다. 그래서 이미지의 전체 크기를 가져와 총로드를 합산하고 합계로로드 된 것을 나눠야합니다. –

+0

네, 맞습니다. 모든 로더 객체를 추적하고 로더에 해당하는 int 배열에 'bytesLoaded'를 기록한 다음 합쳐야합니다. 업데이트를 참조하십시오. – Vesper

+0

모든로드 객체'total_loaded_bytes + = event.bytesLoaded'에 대해'e.bytesLoaded'를 요약했습니다. 왜 bytesLoaded를'progress' 배열에 넣어야합니까? –

관련 문제