2012-03-27 7 views
0

아래 코드는 간단한 추가 및 저장 프로그램입니다. addButton을 눌러 캔바스에 내용을 추가하고 exportButton을 눌러 현재 상태의 캔바스 이미지를 바탕 화면에 저장합니다. 이 코드는 캔버스에 그려진 원 객체를 캔버스에 추가 할 때 잘 작동합니다. .png를 캔버스에로드하려고하면 문제가 발생합니다. 로드 된 내용이 캔버스에 추가되면 exportButton은 모두 작동하지 않으며 더 이상 응답하지 않습니다. 로드 된 내용으로 인해 코드가 손상되는 원인은 무엇입니까? 왜 Loader 객체가 비트 맵 데이터 draw();를 죽입니까?

**이 POST의 HASS

3 월 30 일 아래와 2012 년 편집 된 것은 WORKING 코드 *

public class Application extends MovieClip 
{ 
    public var canvas:MovieClip = new MovieClip(); 
    public var addBtn:MovieClip = new MovieClip(); 
    public var exportBtn:MovieClip = new MovieClip(); 
    public var _content:BitmapData; 

    public function Application() 
    { 
     canvas.graphics.beginFill(0x333333); 
     canvas.graphics.drawRect(0,0,450,450); 
     canvas.graphics.endFill(); 
     addChild(canvas); 

     addBtn.graphics.beginFill(0x999999); 
     addBtn.graphics.drawRect(0,0,50,50); 
     addBtn.graphics.endFill(); 

     exportBtn.graphics.beginFill(0x999999); 
     exportBtn.graphics.drawRect(0,0,50,50); 
     exportBtn.graphics.endFill(); 

     canvas.x = stage.stageWidth/2 - canvas.width; 
     addBtn.x = exportBtn.x = canvas.x +(canvas.width +25); 
     exportBtn.y = addBtn.height + 25; 

     addBtn.addEventListener(MouseEvent.CLICK, addClick); 
     exportBtn.addEventListener(MouseEvent.CLICK, exportClick); 

     addChild(canvas); 
     addChild(addBtn); 
     addChild(exportBtn); 
    } 
    private function addClick(event:MouseEvent):void 
    { 
     var loader:Loader = new Loader(); 
     loader.load(new URLRequest("alphabet/a.png")); 
     loader.x = Math.random() * canvas.width; 
     loader.y = Math.random() * canvas.height; 
     canvas.addChild(loader); 
    } 
    private function exportClick(event:MouseEvent):void 
    { 
     _content = new BitmapData(canvas.width,canvas.height); 
     _content.draw(canvas); 
     saveBitmap(); 
    } 
    private function saveBitmap():void 
    { 
     var encodedContent:ByteArray = PNGEncoder.encode(_content); 
     var fileWindow:FileReference = new FileReference(); 
     fileWindow.save(encodedContent, "Image_randomly.png"); 
    } 
} 

}

+0

디버거로 확인 했습니까? 어떤 충돌이 있습니까? – taskinoor

+0

아마도로드 된 컨텐츠가 내보내기 버튼 위에 추가됩니다. 또한 디버거를 사용하여 응용 프로그램에 오류가 있는지 확인해야합니다. – Ohas

답변

1

문제는 도메인 간 수있다 보안 문제이다. 자신이 아닌 다른 사이트에서로드하는 경우 domain.com/crossdomain.xml에 교차 도메인 정책이 있는지 확인하십시오. LoaderContext (로드의 두 번째 인수)도 설정하십시오. 뭔가 다른 것 : loader.load("http://www.example.com/myimage.jpg", new LoaderContext(true)); 다른 사이트에서 이미지를로드 할 수 있지만 draw()에 필요한 실제 bitmapData는 액세스 할 수 없습니다.

또한 하나 이상의 브라우저에 디버그 플레이어를 설치하고 거기에서 실행하여 오류가 있는지 확인해야합니다.

+0

새로운 LoaderContext를 추가하고 checkpolicyfile을 true로 설정했습니다. 이것은 문제를 해결하지는 못했지만 다른 문제를 수정 한 좋은 읽을 거리였습니다. 작업 시퀀스를 추적하고 스테이지에 이미지를로드 한 다음 내보내기 버튼을 누르는 것보다 draw() 함수에서 프로세스가 중지되었습니다. loader.content를 비트 맵에로드하라는 또 다른 게시물이 있습니다. –

+0

http://stackoverflow.com/questions/4480657/as3-loader-to-bitmapdata-wont-work-basic-but-really-frustrating –

+0

감사합니다. 당신의 도움으로 모든 사람의 도움으로 모든 일을 처리 할 수 ​​있습니다. 꽤 그것은 로더 컨텍스트 였는지 확신합니다. 다시 한번 고마워. 전체 코드는 다음과 같습니다. –