flash操作摄像头

打开Flash CS3,新建一个Flash文件(Script 2.0)。命名为pagea.fla

第一步: 在库中建立一个视频元件,类型选择:视频(受 ActionScript 控制)。 按F11打开库面板,右键空白地方出现一个弹出菜单,选择“新建视频”,随便起个名字。

第二步: 将视频元件拖到场景中,并调整尺寸到想要的大小。并起名为“camera”。同时在该图层放置两个Button,分别命名为“btnCamera”和“btnUpload”。

第三步: 新建一个图层,命名为“代码层” 点击时间轴第一帧,按F9打开代码面板,粘贴如下代码:



//view plaincopy to clipboardprint?
//camera是在场景中一个Video实例
//注意如果要想获取自己想要拍照大小,先做一个你想要大小的FLV文件,然后video选Embedded
camera.clear();
//摄像头控制对象
var cam:Camera = Camera.get();
if ( cam == null){
//code here if client no camera installed
}
//init variable
photow = new Number(100);
photoh = new Number(120);
cam.setMode(photow, photoh, 10, true);
camera.attachVideo(cam); //绑定摄像头视频流到video
//该对象用于实现发送数据到网页可get或post
var lv:LoadVars;
lv = new LoadVars();
//当按下拍照按纽
btnCamera.onRelease = function ()
{
//获取当前视频画片
saveCamera();
//...
};
//toolbar.btnCameraRe.onRelease = function(){
// ...
//saveCamera();
//}
function saveCamera(){
//新建一个bitmapdate对象并获取video上的图像信息
lv.bm = new flash.display.BitmapData(photow, photoh,true, 0);
lv.bm.draw(camera);
//photoPreview是在场景中的一个Movie clip实例,用于输出bitmapdate实现照片预缆
var tempObj = _root.createEmptyMovieClip("photo", 100);
tempObj._x = 63.0;
tempObj._y = 53.0;
tempObj._width = 100;
tempObj._height = 120;
tempObj.attachBitmap(lv.bm, 1);
camera.attachVideo(null);
}
btnCell.onRelease = function (){
_root.photo._visible = false;
camera.attachVideo(cam);
//...
};
//上传照片到服务器
btnUpload.onRelease = function(){
//读取图片矩形范围的像素信息,并以字符串的形式连接起来 begin
i = lv.bm.height;
j = lv.bm.width;
rgb_array = "";
for (y = i - 1; y >= 0; y--)
{
for (x = 0; x < j; x++)
{
color = lv.bm.getPixel(x, y).toString(16);
rgb_array = rgb_array + (color + ",");
} // end of for
} // end of for
lv.height = i;
lv.width = j;
lv.rgb_array = rgb_array;
//读取图片矩形范围的像素信息,并以字符串的形式连接起来 end
//发送到要处理的页面URL,可以在页面通过Request.Form["名称"]获取值,如:Request.Form["rgb_array"]
lv.sendAndLoad("pageb.jsp", lv, "POST");
//当页面返回信息即页面处理完成后,触发的行为
/*
lv.onLoad = function (success)
{
if (success)
{
//跳转到其他页面
getURL("pagea.jsp", "_self");
}
};*/
}

第四步: 按F12把flash导出成为html,你可以得到pagea.fla,pagea.html, pagea.swf和AC_RunActiveContent.js。 把pagea.html重命名为pagea.jsp,放置到你的jsp服务器目录下

第五步: 新建一个文件叫做pageb.jsp。粘贴如下代码



1. <%@page import="java.io.*,java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*,javax.imageio.stream.*"%><%
2.
3. String width = request.getParameter("width");
4.
5. String height = request.getParameter("height");
6.
7. int w = Integer.parseInt(width);
8.
9. int h = Integer.parseInt(height);
10.
11. try {
12.
13. //OutputStream fos = response.getOutputStream();
14.
15. OutputStream fos = new FileOutputStream(new File("c:\\a.jpg"));
16.
17. BufferedImage bf = new BufferedImage(w, h,
18.
19. BufferedImage.TYPE_INT_RGB);
20.
21. String data = request.getParameter("rgb_array");
22.
23. String[] ds = data.split(",");
24.
25. int leng=ds.length-1;
26.
27. for (int i = bf.getHeight()-1; i>=0 ; i--) {
28.
29. for (int j = 0; j < bf.getWidth(); j++) {
30.
31. int d = Integer.parseInt(ds[leng-(i*w+(bf.getWidth()-j-1))], 16);
32.
33. //System.out.print(d);
34.
35. bf.setRGB(j, i, d);
36.
37. }
38.
39. }
40.
41. ImageWriter writer = null;
42.
43. ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(bf);
44.
45. Iterator iter = ImageIO.getImageWriters(type, "jpg");
46.
47. if (iter.hasNext()) {
48.
49. writer = (ImageWriter) iter.next();
50.
51. }
52.
53. if (writer == null) {
54.
55. return ;
56.
57. }
58.
59. IIOImage iioImage = new IIOImage(bf, null, null);
60.
61. ImageWriteParam param = writer.getDefaultWriteParam();
62.
63. param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
64.
65. param.setCompressionQuality(0.2f);
66.
67. // save to file
68.
69. //ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(response.getOutputStream());
70.
71. ImageOutputStream outputStream2 = ImageIO.createImageOutputStream(fos);
72.
73. writer.setOutput(outputStream2);
74.
75. writer.write(null, iioImage, param);
76.
77. fos.close();
78.
79. } catch (Exception e) {
80.
81. e.printStackTrace();
82.
83. }
84.
85. System.out.println("w = " + w + ",h=" + h);
86.
87. response.setContentType("image/jpeg");
88.
89
90. %>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值