对于Flash来说,我几乎是最新秀。
这是actionscript(3):
// Here's the dumb-dumb:
/*****************************************************************/
/*****************************************************************/
function captureImage(e:MouseEvent):void {
// The video still-image is captured and drawn...but at 320x240? Oh, and the real kicker is that it gets squeezed (resized), not cropped.
bitmapData.draw(video);
}
/*****************************************************************/
/*****************************************************************/
// Here's the other relevant code...
/*****************************************************************/
var bandwidth:int = 0;
var quality:int = 100;
var myWidth:int = 320; // the width for camera, video, and bitmaps.
var myHeight:int = 320; // the height for camera, video, and bitmaps.
var cam:Camera = Camera.getCamera();
cam.setQuality(bandwidth, quality);
cam.setMode(myWidth,myHeight,30,false); // (width, height, FPS, favorSize)
var video:Video = new Video();
video.attachCamera(cam);
video.x = 20;
video.y = 20;
// setting the video.width and video.height here makes the video appear in the desired aspect-ratio (1:1). If this is not set it defaults to 320x240.
video.width = myWidth;
video.height = myHeight;
addChild(video);
// 0xff0000 sets a red background just so I can see that the BitmapData "element" is 320x320 like it should be.
var bitmapData:BitmapData = new BitmapData(myWidth, myHeight, false, 0xff0000);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = 360;
bitmap.y = 20;
bitmap.width=myWidth;
bitmap.height=myHeight;
addChild(bitmap);
// capture_mc is my take-a-picture button. :-)
capture_mc.buttonMode = true;
capture_mc.addEventListener(MouseEvent.CLICK,captureImage);
那么,我在这里错过了什么。我知道Flash制造商并不坚持所有图像都应以4:3的宽高比显示,对吧? :O)
无论如何,感谢您帮助“n00b”。
P.S。 Flash使用Ctrl + Y来“重做”而不是Ctrl + Shift + Z(如Photoshop)这一事实让我想要flash.events.destroy(flash)
或其他东西。
更新:
我想出了如何将视频从240扩展到320.但是这样做的质量显着下降。以下代码包含 BOLD :
中的更新部分 var bitmapData:BitmapData = new BitmapData(myWidth,
的 240
, false, 0xff0000);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = 360;
bitmap.y = 20;
bitmap.width=myWidth;
的 bitmap.height=240;
的 bitmap.scaleY=1.333; // ADDED scaleY
addChild(bitmap);
所以我仍然希望找到一种能够最大限度提高质量的解决方案。
答案 0 :(得分:2)
有人问我是否找到了问题的解决方案,答案是肯定的。我只是复制+粘贴我的.fla中的动作脚本所以我不打算解释下面的代码(我实际上不记得一切都做了)。显然舞台上有物体,所以你无法插拔......对不起。请随意解释评论中发生的事情。 : - )
import flash.display.Bitmap;
import flash.display.BitmapData;
import com.adobe.images.PNGEncoder;
// for javascript
import flash.external.ExternalInterface;
var snd:Sound = new camerasound(); //new sound instance for the "capture" button click
var bandwidth:int = 0; // Maximum amount of bandwidth that the current outgoing video feed can use, in bytes per second.
var quality:int = 100; // This value is 0-100 with 1 being the lowest quality.
var myWidth:int = 240;
var myHeight:int = 240;
var hiderD:BitmapData = new BitmapData(myWidth+4,myHeight+4,false,0xffffff);
var borderBox1:Bitmap = new Bitmap(hiderD);
borderBox1.x = 22;
borderBox1.y = 52;
borderBox1.width=hiderD.width;
borderBox1.height=hiderD.height;
var borderBox2:Bitmap = new Bitmap(hiderD);
borderBox2.x = 287;
borderBox2.y = 52;
borderBox2.width=hiderD.width;
borderBox2.height=hiderD.height;
addChild(borderBox1);
addChild(borderBox2);
var cam:Camera = Camera.getCamera();
cam.setQuality(bandwidth, quality);
cam.setMode(320, myHeight, 30, true); // setMode(videoWidth, videoHeight, video fps, favor area)
var video:Video = new Video();
video.attachCamera(cam);
video.x = -500;
video.y = -500;
addChild(video);
// display mode ONLY
var video2:Video = new Video();
video2.attachCamera(cam);
video2.x = -16;
video2.y = 54;
video2.width=320;
video2.height=myHeight;
var m:Shape = new Shape();
m.graphics.beginFill(0x0);
m.graphics.drawRect( 24, 54, 240, 240 ); // draw the mask
m.graphics.endFill(); // end the fill
video2.mask = m;
addChild(video2);
// used for sending
var bitmapData:BitmapData = new BitmapData(320,myHeight,false,0xFF0000);
// used for display
var bitmapData2:BitmapData = new BitmapData(320,myHeight,false,0xAAAAAA);
var bitmap2:Bitmap = new Bitmap(bitmapData2);
bitmap2.x = 249;
bitmap2.y = 54;
bitmap2.width=320;
bitmap2.height=myHeight;
var m2:Shape = new Shape();
m2.graphics.beginFill(0x0);
m2.graphics.drawRect( 289, 54, 240, 240 ); // draw the mask
m2.graphics.endFill(); // end the fill
bitmap2.mask=m2;
addChild(bitmap2);
capture_mc.buttonMode = true;
capture_mc.addEventListener(MouseEvent.CLICK,captureImage);
function captureImage(e:MouseEvent):void {
snd.play();
bitmapData2.draw(video);
bitmapData.draw(video);
warn.visible = false;
save_mc.buttonMode = true;
save_mc.addEventListener(MouseEvent.CLICK, onSaveJPG);
save_mc.alpha = 1;
}
save_mc.alpha = .5;
function onSaveJPG(e:Event):void{
saving.visible = true;
var byteArray:ByteArray = PNGEncoder.encode(bitmapData);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var saveJPG:URLRequest = new URLRequest("/utilities/saveImage.aspx");
saveJPG.requestHeaders.push(header);
saveJPG.method = URLRequestMethod.POST;
saveJPG.data = byteArray;
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, sendComplete);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.load(saveJPG);
function sendComplete(event:Event):void{
var loader:URLLoader = URLLoader(event.target);
ExternalInterface.call("updateImageInputWithFileName",loader.data.filename);
warn.visible = true;
saving.visible = false;
setTimeout(function(){warn.visible=false},10000);
}
function onIOError(event:Event):void{
saving.visible = false;
ExternalInterface.call("error", "Error", "Could not save image." ,"There was a problem saving the image. You can try again or contact an administrator for assistance.");
}
}
warn.visible = false;
saving.visible = false;
答案 1 :(得分:0)
对于AS2应用矩阵变换:
import flash.display.BitmapData;
import flash.geom.Matrix;
capture_btn.onPress = function() {
var cameraBMP= new BitmapData(video.width, video.height);
var myMatrix:Matrix = new Matrix();
myMatrix.scale(1.5, 1.5);
cameraBMP.draw(video,myMatrix);
}
答案 2 :(得分:-1)
首先,Ctrl + Shift + Z只需“撤消”Photoshop中的操作即可。 Ctrl + Y重做:)
其次,视频的高度和宽度取决于它所连接的相机。换句话说,如果您的相机设置为320 x 240,那么它将保持这种状态,除非您更改相机的高度和宽度。另外你犯了一个错误:它是
video.videoHeight = myHeight;
video.videoWidth = myWidth;
因此,这意味着您必须更改相机的高度和宽度。