2010-07-28 3 views
0

이미지를 가져 오려고하는데 플렉스 캔버스 구성 요소에 비트 맵으로 배치하려고합니다. 오류가 발생하지 않는 지점에 도달 할 수 있었지만 이미지가 나타나지 않고 jpg로 저장 한 이미지가 비어 있습니다. 나는 비트 맵 데이터를 올바르게 설정하지 않지만 내가 잘못하고있는 것을 파악할 수 없다고 상상한다. I는 화상을 배치하고 여기서플렉스 구성 요소가 포함 된 이미지를 비트 맵으로 변환

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop); 
    var imageByteArray:ByteArray = imageSnap.data as ByteArray; 
    var bLoader:Loader = new Loader(); 
    bLoader.loadBytes(imageByteArray); 

    var bmd:BitmapData = new BitmapData(500,500); 
    bmd.draw(bLoader); 

    var imgTest:Image = new Image(); 
    imgTest.source = bmd; 
    _renderPop.renderCanvas.addChild(imgTest); 



    var fileRef:FileReference = new FileReference(); 
    fileRef.save(bLoader, 'testImage.jpg'); 

_renderPop.renderCanvas이다 : 여기

I는 비트 맵으로 변환하고있는 코드이다. 아무도 잘못 본 것이 있습니까? 코드에서

답변

0

:

var bLoader:Loader = new Loader(); 
bLoader.loadBytes(imageByteArray); 

... 당신이 바이트가 즉시로드되는 것을 가정하고; 다음과 같이 로더에 이벤트 리스너를 넣어보십시오 기능들이 모두 비동기 프로세스입니다 점에서 부하 기능처럼 작동

bLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 

private function completeHandler(event:Event):void 
{ 
    // ... the rest of your code goes here 
} 

같이 loadBytes는 이벤트 리스너가 필요합니다 그래서. 조금 직관력이 없으며 몇 번이나 동일한 실수를 저 지르게되었습니다. 그래도 문제가 해결되지 않으면

,

바로 :)

+0

감사합니다. 하지만 지금은 잘못된 비트 맵 데이터 오류가 나타납니다. 비트 맵 데이터를 올바르게 캡처하기 위해해야 ​​할 일이 있습니까? – pfunc

+0

명확히하기 위해이 줄에 잘못된 bitmapdata 오류가 표시됩니다. var imageSnap : ImageSnapshot = ImageSnapshot.captureImage (_renderPop.renderCanvas, 150); 방금 ​​_renderPop을 사용하면 오류가 발생하지 않지만 빈 bitmapImage가 표시됩니다. _renderPop.renderCanvas는 mx : Canvas 객체입니다. 나는 그것을 추적 할 수있다, 그것이있다. – pfunc

+0

사용중인 ImageSnapshot 클래스는 무엇입니까? 그 구성 요소를 사용하는 대신 수동으로 시도해보십시오 ... InsideRIA에 대한 매우 흥미로운 블로그 글이 있습니다 (더 많은 내용이 있습니다) http://insideria.com/2008/03/image-manipulation-in -flex.html 도움이 되나요? – infomaniac

1

귀하의 "로더"코드 오면 알려줘 ... 어쩌면 contentLoaderInfo 속성을 생략하지만, 위의 작동합니다 잘못된 것입니다. 이미지를 캡처 한 직후 FileReference를 사용하여 데이터를 저장할 수 있습니다.

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop); 
var fileRef:FileReference = new FileReference();  
fileRef.save(imageSnap.data, 'testImage.png'); 

그 imageSnap에는 BitmapData가 아니라 png 이미지 바이트가 포함되어 있습니다. 결과에서

var bmd:BitmapData = ImageSnapshot.captureBitmapData(_renderPop); 
var imgTest:Image = new Image(); 
imgTest.source = new Bitmap(bmd); 
_renderPop.renderCanvas.addChild(imgTest); 

로컬 testImage.png가 파일 시스템에 생성되고이 캔버스에 표시됩니다 : 이미지를 표시하기 위해 당신의 BitmapData하지만 이미지를 캡처 비트 맵 데이터에서 비트 맵을 작성해야합니다. jpg가 필요한 경우 다음을 지정해야합니다.

var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(_renderPop, 0, new JPEGEncoder()); 
관련 문제