2014-05-23 2 views
0

에 긴 시간이 소요 여기에이 코드는 "무승부"와 "2 저장"사이에 실행하는 데 시간이 오래 걸립니다 내 응용 프로그램은 그 시간 동안 응답하지하게 내 코드절약 무비 클립은 AS3

var bitmapData:BitmapData = new BitmapData(1080,1920); 
bitmapData.draw(zoomall_mc); 
trace("after draw"); 

var jpgEncoder:JPGEncoder = new JPGEncoder(80); 
var byteArray:ByteArray = jpgEncoder.encode(bitmapData); 
trace("in save 2"); 

var fileReference: FileReference = new FileReference(); 
fileReference.save(byteArray, "imageno.jpg"); 
trace("after save"); 

입니다. 나는 왜 이런 일이 일어날 지 모른다.

다른 방법으로 기기에 동영상 클립을 저장할 수 있습니까?

도움을 주시면 감사하겠습니다. 고맙습니다.

+2

ByteArray를 인코딩하는 작업은 시간이 오래 걸리는 작업입니다./thread – Vesper

+1

특히 AS 구현을 사용할 때. [** BitmapData.encode()'**] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#encode())가 더 빨라야합니다. ,하지만 여전히 [** 차단 **] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/system/Worker.html) ... – ndm

답변

-1

생각 좀 오래된되는을BitmapData 객체를 이미지 파일 형식으로 비동기 적으로 인코딩합니다.

2

문제는 시각적 표현을 데이터 (ByteArray)로 '변환'한다고 가정합니다. 이것은 각 픽셀 (다시 말하면 초등)을 검사하기 때문에 시간이 걸립니다.

그리고 귀하의 경우에는 압축을 적용하여 상황을 악화시킵니다.

먼저 작업 전후에 getTimer을 사용하여 실제로 걸리는 시간을 확인할 수 있습니다.

둘째 - 이것은 풀 HD 비트 맵으로, 많은 부분이 확실합니다. 압축 시간을 알면 이미지 품질을 낮추거나 압축하여 이미지를 최적화 할 수 있습니다.

셋째, 작동 가능성이 가장 높습니다.이 작업을 비동기로 만들어야합니다. 일반적인 인코딩은 동기식이므로이 작업이 끝날 때까지 다른 코드가 실행되지 않습니다. 따라서이 작업을 청크로 분할하고 다른 코드도 실행되도록 할 수 있습니다. 너는 그 진절머리 나는 얼기를 원하지 않지, 그렇지? 비동기 인코더는 각 프레임의 작은 양의 이미지를 인코딩하고 일정 시간이 지나면 전체 이미지를 준비합니다.

여기서 단점은 일반적인 것보다 느리게 발생한다는 것입니다. 필자가 본 거의 모든 인코더는 번보다 번만 수행되어 내장 및 최적화 된 인코더보다 느립니다. 지난번 내가 사용한 적이있는 일반 HD 이미지의 경우 3 ~ 4 초가 걸리는 반면 buil-in은 100ms가 걸렸습니다.

하지만 어쨌든, 동결없이 작업을 수행 할 것입니다. 시도해보고 getTimer으로 시간을 다시 확인하십시오. 유진은 전문가 AS 다시이지만,이 - 리 버로우 개발자 AS 가장 상징적 인 중 하나

  • https://code.google.com/p/in-spirit/wiki/JPGEncoder입니다 - 설명
  • http://blog.leeburrows.com/2013/01/asynchronous-image-encoders/와 큰 하나 -

  • 관련 문제