나는 Adobe Air 애플리케이션을 작성 중입니다. 사용자는 비디오를 응용 프로그램으로 가져올 수 있지만 응용 프로그램의 특정 부분에 대한 메모리를 절약하기 위해 먼저 이러한 비디오를 .jpg로 축소판으로 변환하고 축소판을 타일 목록에 표시해야합니다. 따라서 이러한 축소판은 런타임 중에 동적으로 생성되어야합니다. 그래서 제 질문은 어떻게 비디오를 미리보기 이미지로 변환 할 수 있는가하는 것입니다. 지금까지 두 가지 방법을 시도했습니다. ImageSnapshot 클래스를 사용해 보았습니다. 그러나 옵션이 아닌 디스플레이 목록에 비디오를 추가 한 경우에만 사용할 수 있습니다. 그래서 BitmapData 클래스를 사용하여 비트 맵 데이터를 그려 보았고 같은 문제가 발생했습니다. 먼저 디스플레이 목록에 비디오를 추가 한 경우에만 작동합니다. 누구든지 화면에 비디오를 추가하지 않고도 비디오 프레임에서 비트 맵 데이터를 가져올 수있는 방법을 알고 있습니까? 현재 사용중인 코드는 다음과 같습니다. 최종 .jpg 파일을 test.jpg 파일로 데스크탑에 씁니다.이 파일은 .mp4 비디오에서만 작동합니다. 당신이 this.AddElement (VD)가, 더 이상 작동 말한다 줄을 가지고가는 경우 :플렉스/액션 스크립트로 비디오 미리보기 이미지 캡처
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import mx.graphics.ImageSnapshot;
import mx.graphics.codec.JPEGEncoder;
import spark.components.VideoDisplay;
import spark.primitives.BitmapImage;
private const acceptableTypes:FileFilter = new FileFilter("Media", "*.mp4");
private var vd:VideoDisplay;
protected function importVideo(event:MouseEvent):void
{
var file:File = File.userDirectory;
file.addEventListener(Event.SELECT, mediaSelectHandler);
file.browseForOpen("Select File To Import", [acceptableTypes]);
}
private function mediaSelectHandler(event:Event):void {
vd = new VideoDisplay();
vd.autoPlay = false;
vd.horizontalCenter = 0;
vd.verticalCenter = 0;
vd.source = event.currentTarget.nativePath;
this.addElement(vd);
}
private function getSnapShot(event:MouseEvent):void{
var bd:BitmapData = new BitmapData(vd.width, vd.height);
var matrix:Matrix = new Matrix();
bd.draw(vd, matrix);
//save to hard drive
var file:File = File.desktopDirectory;
var imgfile:File = file.resolvePath("test.jpg");
var jpegEncoder:JPEGEncoder = new JPEGEncoder(90);
var jpegStream:ByteArray = jpegEncoder.encode(bd);
var filestream:FileStream = new FileStream();
filestream.open(imgfile, FileMode.WRITE);
filestream.writeBytes(jpegStream, 0, jpegStream.length);
filestream.close();
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:HGroup width="500" height="40" horizontalCenter="0" bottom="50">
<s:Button width="100" height="28" label="IMPORT" click="importVideo(event)"/>
<s:Button width="100" height="28" label="SNAPSHOT" click="getSnapShot(event)"/>
</s:HGroup>
</s:WindowedApplication>
질문 제목을 모두 대문자로 쓰지 마십시오. –