2016-11-28 6 views
-1

loadBytes() 메서드가 아직 Flash Player 또는 AIR에 있습니까?Flash 또는 AIR 용으로 동기화 된로드 바이트 메서드가 있습니까?

추가 정보 :
나는 바이트 배열을로드하고 (NOT 비동기) 동기 비트 맵 데이터로 변환하기 위해 노력하고있어. 비동기 일 수는 없습니다. base64 데이터로 인코딩 된 PNG입니다.

이제 base64에서 바이트 배열로 디코딩 한 다음 바이트 배열을 비트 맵 데이터로 디코딩하려고합니다. 바이트 배열에서 로더없이 비트 맵 데이터로 이동할 방법이없고 loader.loadBytes()은 비동기입니다.

클래스가있는 경우 JavaScript에 바이트 배열을 전달할 수 있다고 가정하지만 최후의 수단입니다.

은 참고로 내가 거기 동기 디코딩이 here를 언급하지만, 작동하지 않는 것처럼 보이는 AIR (23)

를 실행하고 있습니다. 글쎄, 난 아직도 이벤트 리스너를 추가하고 프레임을 기다려야 할 것 같다

enter image description here

이 비동기 할 수 없다, 내가 반복하자. 내 질문은 그것이 가능하다면입니다.

내 데이터를 인코딩하는 예제 코드는 다음과 같습니다. 나는이 call을 사용하고 있습니다 :

var base64ImageData:String = DisplayObjectUtils.getBase64ImageDataString(displayObject, DisplayObjectUtils.PNG, null, true); 

나는 다음 줄에 그것을 해독하려는하지만 수 있도록 loadBytes()하지 않는 것 같습니다. 나는이 call 사용하고 있습니다 :

var bitmapData:BitmapData = DisplayObjectUtils.getBitmapDataFromBase64(bitmapDataString); 

날 반복하자, 나는 동기 행동을 찾고 있어요. 비동기 일 수는 없습니다. 내 질문은 그것이 가능하다면입니다. reference으로

+1

당신은 당신이()'완료 엄격하게'는 Loader.loadBytes 후 코드 실행을 계속해야한다는 것을 의미? – www0z0k

+0

예. 코드가 바로 뒤에 있기 때문에 비동기를 사용할 수 없습니다. –

+1

왜 비동기식이 될 수 없습니까? 그것은 매우 비 슷하다. as3에서 거의 모든 것이 비동기이다. – Brian

답변

0

는 말한다 :

완료 이벤트 - 작업이 완료되면 contentLoaderInfo 객체에 의해 전달됩니다. complete 이벤트는 init 이벤트 이후에 항상 전달됩니다.

따라서 Event.COMPLETE 처리기의 코드를 실행할 수 있습니다.

+0

그 방법은 비동기입니다. 나는 동기에 대해 묻고있다. –

0

BitmapData.setPixels()은 동기식입니다. 소스 바이트 배열의 픽셀에 대해 32 비트의 곱셈되지 않은 ARGB 값이 필요합니다. 테스트 이미지에서 BitmapData.getPixels()을 인쇄하여 픽셀 저장 방법을 확인하십시오.

바이트 배열을 픽셀 데이터의 직사각형 영역으로 변환합니다. 각 픽셀에 대해 ByteArray.readUnsignedInt() 메서드가 호출되고 반환 값이 픽셀에 기록됩니다. 전체 사각형이 작성되기 전에 바이트 배열이 끝나면 함수가 반환됩니다. 바이트 배열의 데이터는 32 비트 ARGB 픽셀 값이어야합니다. 픽셀을 읽기 전이나 후에 바이트 배열에서 검색을 수행하지 않습니다.

UPDATE :getBase64ImageDataString() 중 하나 BitmapData.encode(), 또는 (플렉스 SDK에서) mx.graphics.codec.PNGEncoder/JPEGEncoder 클래스 (플래시 플레이어 11.3 이상에 대한)를 사용하여 PNG 또는 JPG로 이미지를 변환합니다. 그런 다음 결과 바이너리 데이터를 base64로 인코딩합니다. ARGB 픽셀의 일반 행을, 헤더와 함께 : 당신이 BitmapData.setPixels()와 동 기적으로 사용할 수

유일한 형식은 위에서 언급 한 것입니다. PNG, JPG 또는 다른 형식은 허용되지 않습니다.

Loader.loadBytes()을 사용하면 파일 헤더를 해독하고 이미지 크기를 찾고 색 설정을 지정하고 데이터를 내부 형식으로 변환하는 작업을 모두 수행합니다. serialize 된 이미지 데이터를 BitmapData로 동기식으로 변환하려면 모든 작업을 수동으로 수행해야합니다. base64 문자열을 디코딩하고, ByteArray를 가져온 다음 타사 클래스를 사용하여 ActionScript에서 이미지 데이터를 픽셀로 변환합니다. 최소한의 성능을 발휘하는 것이 차선책 일 것입니다. 디코더는 easily found on the net이지만 어쨌든이 방법은 좋지 않습니다.

+0

안녕하세요 @NoxNocts. 이 방법을 사용할 수 있는지 알 수 있습니다. setPixels()을 사용하여 데이터를 인코딩하는 것이 아니라 64 문자열을 기반으로 인코딩합니다. 이 방법의 문제점은 BitmapData 크기를 설정해야하고 나중에 크기를 변경할 수 없다는 것입니다. 기본 64 비트 맵 데이터를 서버에서 있지만 기본 64 크기가 없습니다. –

+0

이미지 데이터를 64로 직렬화하기 전에 서버가 인코딩에 사용하는 형식은 무엇입니까? –

+0

이 함수는'getBase64ImageDataString()'https : // github를 사용하여 데이터를 인코딩합니다.co.kr/monkeypunch3/flexcapacitor/blob/master/MainLibrary/src/com/flexcapacitor/utils/DisplayObjectUtils.as # L1493. 한 줄의 코드에서 쉽게 인코딩 할 수 있지만 다음 줄에서 디코드하려면 Loader를 사용하고 프레임을 기다려야합니까? 같은 코드 블록에서 모두 필요합니다. –