AS3网络摄像头分辨率/大小问题



我对Flash或动作脚本了解不多,但我在AS3和网络摄像头方面遇到了一些麻烦。我有一个连接到网络摄像头的脚本,然后将其输出发送到保存捕获图像的php脚本。除了一个问题外,这一切都有效。看起来实际相机对象允许的最大分辨率是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);
}

我刚刚也遇到了这个问题。解决方法是在创建视频对象时包括宽度和高度参数,而不是在之后通过Video.height和Video.width设置它们。一旦我这样做了,从该视频中获取的所有位图数据的大小都是正确的。

这就是我最初创建视频的方式,该视频不起作用(看起来很好,但导致位图大小不正确):

var vid = new Video();
vid.width = 640;
vid.height = 480;
...

这起到了作用(该视频中的位图大小正确):

var vid = new Video(640, 480);
...

很想知道为什么第一种方法不起作用。也许这就是上面提到的bug。(我没有访问该网站的权限,所以看不到它。)

听起来这个bug从未被修复:http://bugs.adobe.com/jira/browse/FP-2138

我也遇到了类似的问题。对我有效的是我取代了

previewPortData.draw(videoCapture);

带有:

previewPortData.draw(stage);