flash上传 在线拍照

香水坏坏 发表于 2007-8-22 [Javascript]

最近写了个flash实现摄像头拍照上传功能,由于flash用的不是很多,走了点弯路。这里帖出大概实现步骤,更多参看代码注析,值得注意的地方,我用了粗体文字。

 

JavaScript代码
  1. //camera是在场景中一个Video实例   
  2. //注意如果要想获取自己想要拍照大小,先做一个你想要大小的FLV文件,然后video选Embedded   
  3. camera.clear();                   
  4.   
  5. //摄像头控制对象   
  6. var cam:Camera = Camera.get();   
  7. if ( cam  == null){   
  8.    //code here if client no camera installed   
  9. }   
  10. //init variable   
  11. photow = new Number(240);   
  12. photoh = new Number(180);   
  13.   
  14. cam.setMode(photow, photoh, 10, true);   
  15. camera.attachVideo(cam); //绑定摄像头视频流到video   
  16.   
  17. //该对象用于实现发送数据到网页可get或post   
  18. var lv:LoadVars;   
  19. lv = new LoadVars();   
  20.   
  21. //toolbar是在场景中的一个自定义的Movie clip实例,上面放置功能按纽   
  22. toolbar.btnPhotoBorder1._visible = false;   
  23.   
  24.   
  25. //当按下拍照按纽   
  26. toolbar.btnCamera.onRelease = function ()   
  27. {   
  28.     //获取当前视频画片   
  29.     saveCamera();   
  30.     ...   
  31. };   
  32. toolbar.btnCameraRe.onRelease = function(){     
  33.     ...   
  34.     saveCamera();   
  35. }   
  36. function saveCamera(){    
  37.     //新建一个bitmapdate对象并获取video上的图像信息   
  38.     lv.bm = new flash.display.BitmapData(photow, photoh,true, 0);      
  39.     lv.bm.draw(camera);    
  40.     //photoPreview是在场景中的一个Movie clip实例,用于输出bitmapdate实现照片预缆   
  41.     photoPreview.attachBitmap(lv.bm, 1);       
  42. }   
  43.   
  44. //上传照片到服务器   
  45. toolbar.btnUpload.onRelease = function(){   
  46.     loading._visible =true;   
  47.       
  48.     //读取图片矩形范围的像素信息,并以字符串的形式连接起来 begin   
  49.     i = lv.bm.height;   
  50.     j = lv.bm.width;   
  51.     rgb_array = "";   
  52.     for (y = i - 1; y >= 0; y--)   
  53.     {   
  54.         for (x = 0; x < j; x++)   
  55.         {   
  56.             color = lv.bm.getPixel(x, y).toString(16);   
  57.             rgb_array = rgb_array + (color + ",");   
  58.         } // end of for   
  59.     } // end of for   
  60.     lv.height = i;   
  61.     lv.width = j;   
  62.     lv.rgb_array = rgb_array;   
  63.     //读取图片矩形范围的像素信息,并以字符串的形式连接起来 end   
  64.      
  65.     //发送到要处理的页面URL,可以在页面通过Request.Form["名称"]获取值,如:Request.Form["rgb_array"]   
  66.     lv.sendAndLoad("pagea.aspx", lv, "POST");   
  67.   
  68.     //当页面返回信息即页面处理完成后,触发的行为    
  69.     lv.onLoad = function (success)   
  70.     {   
  71.         if (success)   
  72.         {   
  73.             //跳转到其他页面   
  74.             getURL("pageb.aspx""_self");   
  75.         }   
  76.     };   
  77. }   

 

应"小古"要求,贴出C#处理函数:

 

C#代码
  1. System.Drawing.Bitmap DrawImageFromFlashUploader(int width, int height, string[] rgbArray)   
  2.     {   
  3.         System.Drawing.Bitmap bm = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppRgb);   
  4.         int pos = 0;   
  5.         for (int i = bm.Height - 1; i >= 0; i--)   
  6.             for (int j = 0; j < bm.Width; j++)   
  7.             {   
  8.                 bm.SetPixel(j, i, System.Drawing.Color.FromArgb(int.Parse(rgbArray[pos], System.Globalization.NumberStyles.HexNumber)));   
  9.                 pos++;   
  10.             }   
  11.         return bm;   
  12.     }  
访客评论
  • 龙龙    [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:   
  • 评论内容:
  • 私人