flash上传 在线拍照
香水坏坏 发表于 2007-8-22 [Javascript]
最近写了个flash实现摄像头拍照上传功能,由于flash用的不是很多,走了点弯路。这里帖出大概实现步骤,更多参看代码注析,值得注意的地方,我用了粗体文字。
JavaScript代码
- //camera是在场景中一个Video实例
- //注意如果要想获取自己想要拍照大小,先做一个你想要大小的FLV文件,然后video选Embedded
- camera.clear();
- //摄像头控制对象
- var cam:Camera = Camera.get();
- if ( cam == null){
- //code here if client no camera installed
- }
- //init variable
- photow = new Number(240);
- photoh = new Number(180);
- cam.setMode(photow, photoh, 10, true);
- camera.attachVideo(cam); //绑定摄像头视频流到video
- //该对象用于实现发送数据到网页可get或post
- var lv:LoadVars;
- lv = new LoadVars();
- //toolbar是在场景中的一个自定义的Movie clip实例,上面放置功能按纽
- toolbar.btnPhotoBorder1._visible = false;
- //当按下拍照按纽
- toolbar.btnCamera.onRelease = function ()
- {
- //获取当前视频画片
- saveCamera();
- ...
- };
- toolbar.btnCameraRe.onRelease = function(){
- ...
- saveCamera();
- }
- function saveCamera(){
- //新建一个bitmapdate对象并获取video上的图像信息
- lv.bm = new flash.display.BitmapData(photow, photoh,true, 0);
- lv.bm.draw(camera);
- //photoPreview是在场景中的一个Movie clip实例,用于输出bitmapdate实现照片预缆
- photoPreview.attachBitmap(lv.bm, 1);
- }
- //上传照片到服务器
- toolbar.btnUpload.onRelease = function(){
- loading._visible =true;
- //读取图片矩形范围的像素信息,并以字符串的形式连接起来 begin
- i = lv.bm.height;
- j = lv.bm.width;
- rgb_array = "";
- for (y = i - 1; y >= 0; y--)
- {
- for (x = 0; x < j; x++)
- {
- color = lv.bm.getPixel(x, y).toString(16);
- rgb_array = rgb_array + (color + ",");
- } // end of for
- } // end of for
- lv.height = i;
- lv.width = j;
- lv.rgb_array = rgb_array;
- //读取图片矩形范围的像素信息,并以字符串的形式连接起来 end
- //发送到要处理的页面URL,可以在页面通过Request.Form["名称"]获取值,如:Request.Form["rgb_array"]
- lv.sendAndLoad("pagea.aspx", lv, "POST");
- //当页面返回信息即页面处理完成后,触发的行为
- lv.onLoad = function (success)
- {
- if (success)
- {
- //跳转到其他页面
- getURL("pageb.aspx", "_self");
- }
- };
- }
应"小古"要求,贴出C#处理函数:
C#代码
- System.Drawing.Bitmap DrawImageFromFlashUploader(int width, int height, string[] rgbArray)
- {
- System.Drawing.Bitmap bm = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
- int pos = 0;
- for (int i = bm.Height - 1; i >= 0; i--)
- for (int j = 0; j < bm.Width; j++)
- {
- bm.SetPixel(j, i, System.Drawing.Color.FromArgb(int.Parse(rgbArray[pos], System.Globalization.NumberStyles.HexNumber)));
- pos++;
- }
- return bm;
- }
访客评论
-
龙龙 [2008-4-30]认识考虑神色哦扼杀批
-
旺旺 [2008-3-12]能不能把原文件帖出来?
发份邮件好吗?
dianzi5#126.com -
旺旺 [2008-3-12]//当按下拍照按纽
toolbar.btnCamera.onRelease = function ()
{
//获取当前视频画片
saveCamera();
...
};
那个保存的时候,点点点是什么意思呀? -
小金 [2008-1-28]jrl5365@vip.qq.com
你好,我现在很需要你这个flash的源文件,能不能给我一份源文件呢?在这先谢谢您了 -
d [2007-12-7]sdfsdfsdf
-
小古 [2007-12-3]你好,我按照你的做法,效果是出来了,但是本来我设的摄像头的高宽都是250的,.net接收的也是250,但是图片出来的时候,只有长宽大概只有100,其它的部分是就是黑色的,为什么不能应该是全部显示的吗?
-
小古 [2007-12-1]我想问一下问题如何能在用csc编译2005一个web项目
-
周宏 [2007-11-9]感觉非常好,可是我不懂flash,您能不能给一个完整的例子.非常感谢!asp的或者是asp.net的都行,再次谢谢.
-
小古 [2007-10-29]多谢大侠,拨刀相助啊。:)
-
小古 [2007-10-27]大侠,能给出那个asp.net是如何处理的吗
发表评论
- 你的姓名:
- 你的网站:
- EMAIL:
- 评论内容:
- 私人

