文章探索:   分类:    关键字:  
  + 栏目导航
  + 相关文章
未公开的Flash MX使用摄像头和麦克风..
flash摄像头拍照实现原理分析
Flash 8 摄像头拍照
用FLASH操作并控制摄像头
尝试在Flash MX中轻松应用摄像头
让Flash听话:Flash与麦克风的互动
Flash的压缩算法
FLASH脚本语言详解
简单实用的Flash技巧心得
Flash动画下载全攻略
一些Flash经验法则
Flash 缓存问题的解决
FLASH游戏制作基础:响应键盘的四种方..
如何防止SWF文件被反编译?
巧妙提取Flash文件中的素材
实现声音与歌词同步的三种方法
鼠绘技术内幕完全接触-概述篇
鼠绘技术内幕完全接触-动物篇
鼠绘技术内幕完全接触-环境背景篇
鼠绘技术内幕完全接触-效果篇
鼠绘技术内幕完全接触-植物篇
让Flash课件在VCD上播放
Flash中水的形成思路和方法
超简单flash+asp+access计数器
徒手轻松保存网页中的Swf动画
flash上加htm链接的技巧
教你怎么样用Flash来制作马赛克效果
Flash作品的播放保护
将AutoCAD导入Flash
Flash全屏效果全攻略


技术教程 -> FLASH教程 ->  
flash摄像头拍照实现原理分析
来源:转载   人气:2842   录入时间:2007-11-8
    最近一段时间,由于网站的需要,做了一个在线拍照的flash,刚开始的时候也是什么都不懂,对flash也是了解点皮毛,经过不断的在网上查阅资料。经过一周的努力,终于被我搞定了。
   
   主要用到Camera类,MovieClip 类,BitmapData类,LoadVars类,如果要实现这个功能,必须先去了解这几个类
   
   实现的过程如下。
   
   1,先在库中新建一个视频元件,把视频元件拖放到场景中,取名为my_video,新建一个按纽元件,取名为btn_print.
   
   2,加入以下代码实现视频的播放
   myCam = Camera.get();
   myCam.setMode(266,200,10);
   my_video.attachVideo(myCam);
   
   3 ,以下代码实现图片的获得和上传
   import flash.display.BitmapData;
   import flash.geom.Rectangle;
   import flash.geom.ColorTransform;
   
   class PrintScreen {
   
    public var addListener:Function
    public var broadcastMessage:Function
   
    private var id: Number;
    public var record:LoadVars;
   
    function PrintScreen(){
    AsBroadcaster.initialize( this );
    }
    public function print(mc:MovieClip, w:Number, h:Number){
    broadcastMessage("onStart", mc);
    w = Math.floor(w);
    h = Math.floor(h);
    var bmp:BitmapData = new BitmapData(w, h, false);
    record = new LoadVars();
    record.width = w
    record.height = h
    record.cols = 0
    record.rows = 0
    bmp.draw(mc);
    id = setInterval(copysource, 1, this, mc, bmp);
    }
   
    private function copysource(scope, movie, bit){
    var pixel:Number
    var str_pixel:String
    scope.record["px" + scope.record.rows] = new Array();
    for(var a = 0; a < bit.width; a++){
    pixel = bit.getPixel(a, scope.record.rows )
    str_pixel = pixel.toString(16)
    scope.record["px" + scope.record.rows].push(str_pixel)
    }
   
    scope.record.rows += 1
    if(scope.record.rows >= bit.height){
    clearInterval(scope.id)
    bit.dispose();
    }
    }
   }
   
   4 以下代码在服务器段接受数据,生成图片(jsp版)
   String width = request.getParameter("width");
    String height = request.getParameter("height");
   int w = Integer.parseInt(width);
    int h = Integer.parseInt(height);
   try {
    OutputStream fos = response.getOutputStream();
    BufferedImage bf = new BufferedImage(w, h,
    BufferedImage.TYPE_INT_RGB);
   
    for (int i = 0; i < bf.getHeight(); i++) {
    String data = request.getParameter("px" + i);
    String[] ds = data.split(",");
    for (int j = 0; j < bf.getWidth(); j++) {
    int d = Integer.parseInt(ds[j], 16);
    bf.setRGB(j, i, d);
    }
    }
   
    ImageWriter writer = null;
    ImageTypeSpecifier type = ImageTypeSpecifier
    .createFromRenderedImage(bf);
    Iterator iter = ImageIO.getImageWriters(type, "jpg");
    if (iter.hasNext()) {
    writer = (ImageWriter) iter.next();
    }
    if (writer == null) {
    return null;
    }
    IIOImage iioImage = new IIOImage(bf, null, null);
    ImageWriteParam param = writer.getDefaultWriteParam();
   
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
   
    param.setCompressionQuality(0.2f);
   
    // save to file
    ImageOutputStream outputStream2 = ImageIO
    .createImageOutputStream(response.getOutputStream());
    writer.setOutput(outputStream2);
    writer.write(null, iioImage, param);
   
    fos.close();
   
    } catch (Exception e) {
    e.printStackTrace();
    }
   System.out.println("w = " + w + ",h=" + h);
    response.setContentType("image/jpeg");
    return null;
   




Copyright(C)2007-2024 广州市佳沛数码科技有限公司 版权所有
公司地址: 广州市荔湾区东漖北路560号511室
电话:020-81803473 传真:020-81544987