快速业务通道

Flash摄像头游戏课件的设计与实现

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-08
amp;0xff;
  //计算该点亮度值
  nl=Math.sqrt(nr*nr + ng*ng + nb*nb)
  //获取前一快照before同一点的RGB值
  bc=before.getPixel(x,y);

//红色通道
  br=bc>>16&0xff;
  //绿色通道
  bg=bc>>8&0xff;
  //蓝色通道
  bb=bc&0xff;
  //计算该点亮度值
  bl=Math.sqrt(br*br + bg*bg + bb*bb);
  //计算亮度值的变化
  d=Math.round(Math.abs(bl-nl));
  if(d>tolerance)
  {
  //该点发生了变化
  }
  但是这种方法存在计算效率问题。按图像大小为180*160像素,每秒30帧计算,每计算一副图片需要的计算次数为180*160*30。图像的像素越大,需要的计算次数就越多。采用隔点检测的方法可以在一定程度上缓解计算压力,即每隔n个像素检测一次,这样电脑的计算次数减少为原来的1/n。
  2)改进思路
  Flash8提供的图像混合模式可以解决上面遇到的效率问题。Flash8提供了11种图像混合模式。每一种混合模式可以得到不同的混合效果。Different 混合模式是基于两张图片之间的亮度差值进行计算,从而得到图片的负片效果。利用该模式,便可以得到移动像素的检测图像。
  //将前一张快照before的图像绘制到当前快照now上,使用different混合模式
  now.draw(before, new Matrix(), null, "difference");
  图像中黑色表示没有发生移动,其他颜色表示发生了移动。由于Flash8提供的混合模式是采用C++编码实现的,因此运行效率要比Action Script编码更加高效。
  5.动态显示检测图像
  1)处理检测图像
  通过以上两种方式得到的图像中色彩范围较广,这增加了统计上面的困难。通过使用 threshold() 方法,可以隔离和替换图像中的颜色范围,并对图像像素执行其它逻辑操作。threshold()函数根据指定的阈值测试图像中的像素值,并将通过测试的像素设置为新的颜色值。这样,便得到了清晰醒目的检测图像。
  //将大于阀值0xFF111111的像素替换为绿色。
  myBitmap.threshold(myBitmap, myBitmap.rectangle, myBitmap.rectangle.topLeft, ">", 0xFF111111, 0xFF00FF00, 0x00FFFFFF, false);
  2)检测图像的显示
  Bitmap对象无法直接在舞台上显示,必须附着在MovieClip上面才能显示。因此可以使用MovieClip类的attachBitmap()方法,将获取的图像信息显示出来。
  //创建一个影片剪辑来显示当前图像
  this.createEmptyMovieClip(“当

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号