我使用以下代码:
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(...); //????????
}
以从videoDisplay对象捕获帧 1)它是正确的还是我做错了什么? 2)如何将bmpData作为.jpg存储在我的计算机上?
我正在使用flex4.5,它是一个空中应用......
任何想法??
提前致谢!!
答案 0 :(得分:1)
此链接应该有所帮助: Creating images with Air and JPEG Encoder
答案 1 :(得分: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编码,您需要导入
import mx.graphics.codec.JPEGEncoder;
上述更改应足以让用户拍摄正在运行的视频的快照。 请注意,通过此操作,系统将提示用户选择文件的位置。 如果您想要静音保存,请告诉我,我会提供所需的代码。
答案 2 :(得分: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中的图像“组件”,使其完成缩放视频图像的工作,然后拍摄此调整大小的图像组件的快照,然后将其写入文件。
答案 3 :(得分: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宽度120高度而不是BitmapData(videoDisplay.width,videoDisplay.height);我该怎么做才能解决这个问题?
非常感谢大家!