前两天看了一个flex摄像头拍照的程序感觉不错不过是C#
代码的,有点遗憾,今天给他改成了java代码的。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="750" height="600" creationComplete="initApp()"> <mx:Style> Alert{font-size:12px;} </mx:Style> <mx:Script> <!--[CDATA[ import mx.events.CloseEvent; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.controls.Alert; private static const DEFAULT_CAMERA_WIDTH:Number = 160; //摄像头显示宽度 private static const DEFAULT_CAMERA_HEIGHT:Number = 120; //摄像头显示高度 // private static const DEFAULT_WEBSERVICE_URL:String = "http://localhost:1888/Web/TestWebService.asmx?WSDL"; //WebService地址 private var m_camera:Camera; //定义一个摄像头 private var m_localVideo:Video; //定义一个本地视频 private var m_pictureBitmapData:BitmapData //定义视频截图 [Bindable] private var m_pictureData:String; private function initApp():void { t_btn_Shooting.enabled = false; t_ban_Save.enabled = false; initCamera(); } //初始化摄像头 private function initCamera():void { m_camera = Camera.getCamera(); if(m_camera != null) { 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; } //保存按钮事件,保存视频截图 //通过WebService保存 // private function SavePicture():void // { // m_pictureData = ""; // for(var i:int = 0; i < DEFAULT_CAMERA_WIDTH; i++) // { // for(var j:int = 0; j < DEFAULT_CAMERA_HEIGHT; j++) // { // if(m_pictureData.length > 0) // { // m_pictureData += "," + m_pictureBitmapData.getPixel32(i,j).toString(); // } // else // { // m_pictureData = m_pictureBitmapData.getPixel32(i,j).toString(); // } // } // } // // t_ws_SavePicture.SavePicture.send(); // } //检测摄像头权限事件 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(); } } //WebService保存图片成功事件 private function __onSavePictureResult(event:ResultEvent):void { //trace(event.result); if(event.result.toString() == "保存成功") { Alert.show(event.result.toString(),"提示",Alert.OK,this,__onAlertCloseHandler); } else { Alert.show(event.result.toString(),"提示",Alert.OK); } } //连接WebService失败事件 private function __onSavePictureFault(event:FaultEvent):void { //Alert.show(event.fault.toString(),"提示",Alert.OK); Alert.show("连接WebService失败。","提示",Alert.OK); } //保存图片成功后的弹出窗口确认事件 private function __onAlertCloseHandler(event:CloseEvent):void { if(event.detail == Alert.OK) { //trace("转向页面"); } } public function SavePicture(){ var params:URLVariables = new URLVariables(); m_pictureData = ""; for(var i:int = 0; i < DEFAULT_CAMERA_WIDTH; i++) { for(var j:int = 0; j < DEFAULT_CAMERA_HEIGHT; j++) { if(m_pictureData.length > 0) { m_pictureData += "," + m_pictureBitmapData.getPixel32(i,j).toString(); } else { m_pictureData = m_pictureBitmapData.getPixel32(i,j).toString(); } } } params.width = DEFAULT_CAMERA_WIDTH; params.height = DEFAULT_CAMERA_HEIGHT; params.bitmap_data = m_pictureData; savePictureService.url = "http://localhost:8088/archive/savepicturesrv"; savePictureService.send(params); } ]]--> </mx:Script> <mx:HTTPService showBusyCursor="true" id="savePictureService" method="POST" resultFormat="xml" fault="__onSavePictureFault(event)" result="__onSavePictureResult(event)"/> <mx:Panel x="10" y="10" width="180" height="200" layout="absolute" title="视频拍照" fontSize="12"> <mx:VideoDisplay id="t_vd_Video" width="160" height="120"/> <mx:ControlBar horizontalAlign="right"> <mx:Button id="t_btn_Shooting" label="拍照" click="SnapshotPicture()"/> </mx:ControlBar> </mx:Panel> <mx:Panel id="t_panel_Picture" x="198" y="10" width="180" height="200" layout="absolute" title="拍照图片" fontSize="12" visible="false"> <mx:Image id="t_img_Picture" x="0" y="0" width="160" height="120"/> <mx:ControlBar horizontalAlign="right"> <mx:Button id="t_ban_Save" label="保存" click="SavePicture()" /> </mx:ControlBar> </mx:Panel> </mx:Application>
java 代码:
public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); String bitmap_data = request.getParameter("bitmap_data"); int width = commons.getRequestInt(request.getParameter("width"),0); int height = commons.getRequestInt(request.getParameter("height"),0); BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); try { int w = width; int h = height; int[] pixels = new int[w * h]; String[] m_tempPics = bitmap_data.split(","); for (int x = 0; x < w; x++) { for (int y = 0; y < h; y++) { Long pic_argb = Long.parseLong(m_tempPics[x * h + y]); int a = (int) (pic_argb >> 24 & 0xFF); int r = (int) (pic_argb >> 16 & 0xFF); //右移16位 ,取后8位; int g = (int) (pic_argb >> 8 & 0xFF); int b = (int) (pic_argb & 0xFF); pixels[y * w + x] = new Color(r, g, b, a).getRGB(); } } img.setRGB(0, 0, w, h, pixels, 0, w); img.flush(); ByteArrayOutputStream bao = new ByteArrayOutputStream(); ImageIO.write(img, "jpg", bao); byte[] data = bao.toByteArray(); Personimage user = new Personimage(); user.setFileContent(data); PersonimageDAO hm = new PersonimageDAO(); hm.save(user); PersonrelationDAO prm = new PersonrelationDAO(); Personrelation pr = prm.findById(new Long(personRelationId)); pr.setPersonimageid(user.getId()); pr.setImageflag("1"); prm.update(pr); str.append("保存成功"); } catch (Exception e) { e.printStackTrace(); str.append("保存失败"); } response.setContentType("text/xml"); response.getWriter().write(str.toString()); }