首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

[讨论]asp.net(C#)+Flash在线拍照功能解决思路

2012-03-08 
[讨论]asp.net(C#)+Flash在线拍照功能想实现asp.net(C#)+Flash在线拍照功能,搜了一大圈,只找到了jsp版的,

[讨论]asp.net(C#)+Flash在线拍照功能
想实现asp.net(C#)+Flash在线拍照功能,搜了一大圈,只找到了jsp版的,代码如下:


主要用到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;


本人不懂jsp,求C#版的,谢谢.



[解决办法]
原理是一样的,Flash拍照后,把二进制数据传给后台(JS,ASp.net都可以)。再由ASp.net读取数据流,还原成图片。一点也不难。自己作吧。一般,是不会给你成品的代码的。翻译更是没有必要。

热点排行