flex+FluorineFx ASP.NET 视频拍照

声明:此代码为网上代码修改而来,为与FluorineFX配合做了相应修改([Flex视频截图并通过WebService(C#)保存])
Flex代码:

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< mx:Application  xmlns:mx = " http://www.adobe.com/2006/mxml "  layout = " absolute "  width = " 100% "  height = " 100% "  creationComplete = " initApp() "  horizontalAlign = " center "  verticalAlign = " middle "  fontFamily = " Courier New "  fontSize = " 12 " >  
    
< mx:Style >  
        Alert{font
- size:12px;} 
    
</ mx:Style >  
    
< mx:Script >  
        
<! [CDATA[ 
            
import  mx.graphics.codec.JPEGEncoder;
            
import  flash.net.NetConnection;
            
import  flash.net.ObjectEncoding;
            
import  flash.net.Responder;
            
import  mx.events.CloseEvent; 
            
import  mx.controls.Alert; 
            
            
//
             private  var nc:NetConnection;
            
private  var rp:Responder;
            
            
private  var DEFAULT_CAMERA_WIDTH:Number  =   230 // 摄像头显示宽度 
             private  var DEFAULT_CAMERA_HEIGHT:Number  =   167 // 摄像头显示高度 
             
            
private  var m_camera:Camera;  // 定义一个摄像头 
             private  var m_localVideo:Video;  // 定义一个本地视频 
             private  var m_pictureBitmapData:BitmapData  // 定义视频截图 
             private  var m_picUrl:String; // 保存的图片名称
             
            
private  var fileRef:FileReference;
              
private  var urlReq:URLRequest;
            
private  function initApp(): void  
            { 
                m_picUrl
= "" ;
                t_btn_Shooting.enabled 
=   false
                t_ban_Save.enabled 
=   false
                initCamera(); 
            } 
             
            
// 初始化摄像头 
             private  function initCamera(): void  
            { 
                m_camera 
=  Camera.getCamera(); 
                
if (m_camera  !=   null
                { 
                    DEFAULT_CAMERA_WIDTH 
=  t_vd_Video.width; // m_camera.width;
                    DEFAULT_CAMERA_HEIGHT = t_vd_Video.height; // m_camera.height;
                    
                    m_camera.addEventListener(StatusEvent.STATUS,onCameraStatusHandler); 
                     
                    m_camera.setMode(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT,
30 );
                     
                    m_localVideo 
=   new  Video(); 
                    m_localVideo.width 
=  DEFAULT_CAMERA_WIDTH; 
                    m_localVideo.height 
=  DEFAULT_CAMERA_HEIGHT; 
                    m_localVideo.attachCamera(m_camera); 
                    t_vd_Video.addChild(m_localVideo); 
                } 
                
else  
                { 
                    Alert.show(
" 没有找到摄像头,是否重新查找。 " , " 提示: " ,Alert.OK | Alert.NO, this ,InitCamera); 
                    
return
                } 
            } 
             
            
// 拍照按钮事件,进行视频截图 
             private  function SnapshotPicture(): void  
            { 
                m_pictureBitmapData 
=   new  BitmapData(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT); 
                m_pictureBitmapData.draw(t_vd_Video,
new  Matrix()); 
                 
                var m_pictureBitmap:Bitmap 
=   new  Bitmap(m_pictureBitmapData); 
                t_img_Picture.addChild(m_pictureBitmap); 
                 
                t_panel_Picture.visible 
=   true
                t_ban_Save.enabled 
=   true
                
                
// 将bitmap转存到byteArray
                
// 编码成图片格式流
                
                
// var pixels:ByteArray = m_pictureBitmapData.getPixels( new Rectangle(0,0,DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT) );
                
// 上面一行的方法行不通,需要使用以下两行的方法
                var encoder:JPEGEncoder  =   new  JPEGEncoder( 100 ); 
                var pixels:ByteArray 
=  encoder.encode(m_pictureBitmapData);
                
                   nc
= new  NetConnection();
                
// 以处理来自服务器的返回值
                rp = new  Responder(successResult,errStatus);
                
// 指示应对其调用回调方法的对象
                nc.client = nc;
                
// 设置采用的编码
                
                nc.objectEncoding 
=  flash.net.ObjectEncoding.AMF3;
                nc.connect(
" http://172.168.0.99/Flfx/Gateway.aspx " );
                nc.call(
" Flfx.Sample.getPic " ,rp,pixels, " test.jpg " );
            } 
            
private  function successResult(result:String): void  {
                trace(
" 返回结果: " + result);
                m_picUrl
= result;
                trace(m_picUrl);
                
// 关闭连接
                nc.close();
            }
            
private  function errStatus(result:Boolean): void  {
                trace(
" 发生错误! " );
                Alert.show(
" 不好意思,发生错误!*_! " );
                nc.close();
            }
            
// 保存按钮事件,下载视频截图 
             private  function SavePicture(): void  
            { 
                
if (m_picUrl  !=   ""   &&  m_picUrl  !=   " null "  )
                {
                    
// Alert.show(" http://172.168.0.99/flfx/ "+m_picUrl);
                    urlReq  =   new  URLRequest( " http://172.168.0.99/flfx/ " + m_picUrl);
                    fileRef 
=   new  FileReference();
                    fileRef.download(urlReq);
                }
            } 
             
            
// 检测摄像头权限事件 
             private  function onCameraStatusHandler(event:StatusEvent): void  
            { 
                
if ( ! m_camera.muted) 
                { 
                    t_btn_Shooting.enabled 
=   true
                } 
                
else  
                { 
                    Alert.show(
" 无法链接到活动摄像头,是否重新检测。 " , " 提示: " ,Alert.OK | Alert.NO, this ,InitCamera); 
                } 
                m_camera.removeEventListener(StatusEvent.STATUS,onCameraStatusHandler); 
            } 
             
            
// 当摄像头不存在,或连接不正常时重新获取 
             private  function InitCamera(event:CloseEvent): void  
            { 
                
if (event.detail  ==  Alert.OK) 
                { 
                    initApp(); 
                } 
            } 

        ]]
>  
    
</ mx:Script >  

    
< mx:Panel x = " 10 "  y = " 10 "  width = " 250 "  height = " 251 "  layout = " absolute "  title = " 视频拍照 "   horizontalAlign = " center "  verticalAlign = " middle " >  
        
< mx:VideoDisplay id = " t_vd_Video "  width = " 230 "  height = " 167 "  backgroundColor = " #9DC6A7 " />  
        
< mx:ControlBar  >  
            
< mx:Button id = " t_btn_Shooting "  label = " 拍照 "  click = " SnapshotPicture() " />  
        
</ mx:ControlBar >  
    
</ mx:Panel >  
    
< mx:Panel id = " t_panel_Picture "  x = " 268 "  y = " 10 "  width = " 250 "  height = " 251 "  layout = " absolute "  title = " 拍照图片 "   visible = " false " >  
        
< mx:Image id = " t_img_Picture "  x = " 0 "  y = " 0 "  width = " 230 "  height = " 167 " />  
        
< mx:ControlBar >  
            
< mx:Button id = " t_ban_Save "  label = " 保存 "  click = " SavePicture() "   />  
        
</ mx:ControlBar >  
    
</ mx:Panel >  
</ mx:Application >


ASP.NET代码[FluorineFx web项目 Sample.cs类]:

using  System;
using  FluorineFx;
using  FluorineFx.AMF3; 
using  System.IO;   
using  System.Net;
using  System.Data;   
using  System.Drawing;   
using  System.Drawing.Imaging;   
using  System.Web;

namespace  Flfx
{
    
///   <summary>
    
///  Fluorine sample service.
    
///   </summary>
    [RemotingService( " Fluorine sample service " )]
    
public   class  Sample
    {
        
public  Sample()
        {
        }

        
public   string  Echo( string  text)
        {
            
return   " Gateway echo:  "   +  text;
        }

        
// 生成图片
         public   string  getPic(ByteArray byteArray, string  fileName)   
        {   

            
uint  length  =  byteArray.Length;   
            
byte [] bytes  =   new   byte [length];   
            byteArray.ReadBytes(bytes, 
0 , length);   
                
            Stream ms 
=   new  MemoryStream(bytes);

            Image img 
=  Bitmap.FromStream(ms);   
            Bitmap bmp 
=   new  Bitmap(img); 
            ms.Position
= 0 ;
            
// Bitmap bmp = (Bitmap)Bitmap.FromStream(ms);   


            
// To save the image to a file   
            MemoryStream tempStream  =   new  MemoryStream();   
            bmp.Save(tempStream,System.Drawing.Imaging.ImageFormat.Jpeg);   

            
// 文件名
            DateTime date  =  DateTime.Now; 
            fileName
= date.Year.ToString()  +  date.Month.ToString()  +  date.Day.ToString()  +  date.Hour.ToString()  +  date.Minute.ToString()  +  date.Second.ToString()  +  Convert.ToString(( new  Random()).Next( 99 *   97   +   100 ); 
            fileName
+= " .jpg " ;

            FileStream fs 
=   new  FileStream(System.Web.HttpContext.Current.Server.MapPath(fileName), FileMode.Create);   
            tempStream.WriteTo(fs);   
            tempStream.Close();   
            fs.Close();   

            
return  fileName;
        }  
    }
}

效果图:

摄像头是"9158虚拟摄像头",放了张图片;D
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值