2011-12-07 4 views
1

내가 다음 코드를 사용에 어도비 플렉스를 사용하여 JPG로하십시오 비디오 리플렉션 개체 1)이 올바른지에서 프레임을 캡처하거나하기 위해bmpData 저장 AIR 응용 프로그램

protected function videoDisplay_playheadUpdateHandler(event:mx.events.VideoEvent):void 
{ 
    if(!captured && videoDisplay.playheadTime>=0){ 
    capture(); 
    }   
} 

private function capture():void 
{ 

      var bmpData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height); 
      bmpData.draw(videoDisplay); 

      captured = true; 
      store(...); //???????? 


} 

을 내가 뭔가 잘못하고있는 중이 야? 2) 내 컴퓨터에서 bmpData를 .jpg로 저장하려면 어떻게해야합니까?

나는 flex4.5를 사용하고 있으며, 에어 애플 리케이션입니다 ...

어떤 아이디어 ??

미리 감사드립니다.

답변

1

이 링크는 도움이 될 것입니다 Creating images with Air and JPEG Encoder

+0

정말 도움이됩니다! 고마워요! – sstauross

+0

파일을 다른 디렉터리에 저장하고 바탕 화면을 저장하지 않으려면 어떻게해야합니까 ?? – sstauross

+1

사용자 지정 경로를 지정하거나 사용자가 저장할 위치를 찾아 볼 수 있습니다. [이 링크] (http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/flash/filesystem/File.html)에서 세부 정보를 다루고 있습니다. (예를 들어'browseForSave()') – tolmark

1

은 다음 코드는 당신이

var jpegEncoder:JPEGEncoder = new JPEGEncoder(90); 
var jpgSource:BitmapData = new BitmapData(videoDisplay.width,videoDisplay.height); 
jpgSource.draw(this); 
var fileReference:FileReference = new FileReference(); 
fileReference.save(jpegEncoder.encode(jpgSource),"videoImage.jpg"); 

JPEG 당신이

수입 mx.graphics.codec.JPEGEncoder를 가져올 수 있어야합니다 인코딩 사용하려면 도움이 될 것입니다 ;

위의 변경 사항으로 인해 사용자는 실행중인 비디오의 스냅 샷을 찍을 수 있습니다. 이 경우 사용자는 파일의 위치를 ​​선택하라는 메시지가 표시됩니다. 자동 저장을 원하면 필요한 코드를 입력 해주십시오.

+0

예 제가 실제로하는 일은 비디오를 녹화하고 장면 뒤에 저장하는 것입니다. 그리고 저장된 비디오를 볼 수 있기 때문에 하나 하나의 엄지 손가락을 갖고 싶기 때문에 이해할 수 있습니까? 하지만 문제는 위의 코드를 playheadupdate 핸들러에서 호출 할 때입니다. – sstauross

+0

로컬에없는 서버에서 비디오가 재생된다는 사실을 잊어 버렸습니다. – sstauross

+0

그건 중요하지 않습니다."파일"이라고 말하면 저장하려는 이미지의 위치를 ​​선택하기위한 "다른 이름으로 저장"대화 상자가 표시됩니다. – Neeraj

0

마침내 내 캡처는 다음과 같습니다

 private function capture(filename:String):void 
     { 
      var bitmapData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);    
      bitmapData.draw(videoDisplay,new Matrix()); 

      var bitmap : Bitmap = new Bitmap(bitmapData); 
      var jpg:JPEGEncoder = new JPEGEncoder(); 
      var ba:ByteArray = jpg.encode(bitmapData); 
      var newImage:File = File.desktopDirectory.resolvePath("KioskThumbs/"+filename+".jpg"); 

      fileStream = new FileStream(); 
      fileStream.open(newImage, FileMode.UPDATE); 
      fileStream.writeBytes(ba); 
      fileStream.close(); 
      captured = true; 

     } 

은 내가 사진 150 폭 120height 및하지의 BitmapData (videoDisplay.width, videoDisplay.height)에 말할 수 확장 할 사실을 제외하고 잘 작동; 나는 그것을 해결하기 위해 무엇을 할 수 있습니까?

감사합니다.

1

어플 리케이션의 어느 곳에서나 이미지 태그를 다음과 같이 유지하십시오. 가장 적합한 장소는 동영상 바로 아래 있어야합니다.

<mx:Image scaleContent="true" width="150" height="120" maintainAspectRatio="false" id="myScaledSnapshot"/> 

이제이 작업이 완료로 수행 코드에서 다음과 같이 변경 :

private function capture(filename:String):void 
    { 
     var bitmapData:BitmapData = new BitmapData(videoDisplay.width, videoDisplay.height);    
     bitmapData.draw(videoDisplay,new Matrix()); 

     var bitmap : Bitmap = new Bitmap(bitmapData); 
     var jpg:JPEGEncoder = new JPEGEncoder(); 
     var ba:ByteArray = jpg.encode(bitmapData); 

     myImageSnapshot.source=ba; 
     var jpegEncoder:JPEGEncoder = new JPEGEncoder(50); 
     var imageSnapshot:ImageSnapshot = ImageSnapshot.captureImage(this.myImageSnapshot,90,jpegEncoder); 
     var imageByteArray:ByteArray = imageSnapshot.data; 

     var newImage:File = File.desktopDirectory.resolvePath("KioskThumbs/"+filename+".jpg"); 

     fileStream = new FileStream(); 
     fileStream.open(newImage, FileMode.UPDATE); 
     fileStream.writeBytes(imageByteArray); 
     fileStream.close(); 
     captured = true; 

    } 

위의 코드는 정말 특별한 일을 할 나던. Flex에서 가져온 이미지 '구성 요소'만 사용하여 비디오 이미지의 크기를 조정 한 다음이 크기가 조정 된 이미지 구성 요소의 스냅 샷을 만든 다음 파일에 기록합니다.

+0

도움을 주셔서 다시 한 번 감사드립니다. – sstauross

+0

안녕하세요. 문제가 있습니다 ... 이미지가 축소 된 myImageSnapshot에서 처음 캡처 된 경우 저장 될 때 검은 색으로 나타나고 새 이미지를 캡처하면 이전 이미지가 그대로 저장됩니다. 어떤 생각? – sstauross

+0

아마 스케일링 후에 이미지가 제대로로드되지 않았습니다. flex의 이미지 탭에서 사용할 수있는 모든 이벤트를 검색하고로드/완료 이벤트 중 하나를 사용하여 다음 스냅 샷을 트리거합니다. – Neeraj

관련 문제