我对Flash或Action Scripts的了解并不多,但我在AS3和网络摄像头方面遇到了一些麻烦。我有一个连接到网络摄像头的脚本,然后将其输出发送到保存捕获图像的php脚本。除一个问题外,这一切都有效。似乎实际Camera对象允许的最大分辨率为320x240。我最终将佳能60D连接成网络摄像头,因为我有一个普通的网络摄像头应该具有1280x720的最大分辨率,而我所能获得的是320x240的图像。到目前为止我发现的是我能从佳能获得的最大值也是320x240。也许我一直在看这个很久但我很难过。下面是动作脚本的示例,其中videoCapture应为1024x768。相反的是,使用黑色背景创建1024x768图像,而左上角是来自videoCapture的320x240图像。我显然可以调整大小,但这会破坏质量差的目的。有没有我在这里缺少的东西,甚至可能是Flash的一些限制?
// adds event listener to the stage for keydown events.
stage.addEventListener(KeyboardEvent.KEY_DOWN, detectEnterKey);
import flash.display.Bitmap;
import flash.display.BitmapData;
import com.adobe.images.JPGEncoder;
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
var bandwidth:int = 0;
var quality:int = 100;
var cam:Camera = Camera.getCamera();
var videoCapture:Video = new Video();
var previewPortData:BitmapData = new BitmapData(1024, 768, true, 0x00000000);
var previewPort:Bitmap = new Bitmap(previewPortData);
function onCameraStatus(evt):void {
if (evt.code == "Camera.Muted") {
Security.showSettings(SecurityPanel.CAMERA);
}
}
// detects the keycode looking for enter key pressed.
function detectEnterKey(event:KeyboardEvent):void {
//trace("keycode: "+event.keyCode);
if (event.keyCode == Keyboard.ENTER) {
previewPortData.draw(videoCapture);
var myEncoder:JPGEncoder = new JPGEncoder(100);
var byteArray:ByteArray = myEncoder.encode(previewPortData);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var saveJPG:URLRequest = new URLRequest("save.php");
saveJPG.requestHeaders.push(header);
saveJPG.method = URLRequestMethod.POST;
saveJPG.data = byteArray;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, sendComplete);
urlLoader.load(saveJPG);
function sendComplete(event:Event):void {
trace("compete");
}
}
}
if (cam == null) {
Security.showSettings(SecurityPanel.CAMERA);
} else {
cam.addEventListener(StatusEvent.STATUS, onCameraStatus)
cam.setQuality(bandwidth, quality);
cam.setMode(1024, 768, 30, false);
videoCapture.attachCamera(cam);
videoCapture.width = 1024;
videoCapture.height = 768;
addChild(videoCapture);
previewPort.x = 430;
previewPort.y = 50;
addChild(previewPort);
}
答案 0 :(得分:7)
我也遇到了这个问题。通过在创建Video对象时包含width和height参数来解决它,而不是之后通过Video.height和Video.width设置它们。一旦我这样做,从该视频中获取的所有bitmapData都已正确调整大小。
这就是我最初创建不工作的视频的方式(看起来不错,但导致位图大小不正确):
var vid = new Video();
vid.width = 640;
vid.height = 480;
...
这很有效(此视频的位图大小正确):
var vid = new Video(640, 480);
...
很想知道为什么第一种方法不起作用。也许这就是上面提到的错误。 (我无法访问该网站,因此看不到它。)
答案 1 :(得分:2)
听起来这个错误从未修复过:http://bugs.adobe.com/jira/browse/FP-2138
答案 2 :(得分:1)
我有类似的问题。对我有用的是我取代了:
previewPortData.draw(videoCapture);
使用:
previewPortData.draw(stage);