flex有一个功能可以将组建转换成Bitmap这样只要拿到编辑过的图片字节码一切就容易了。这个功能大概有四步。
1.加载要编辑的图片
加载图片可以使用 BitImage类
因为只是演示一下就直接将将BitImage写死了。 代码:
- <s:group id="myPanel" x="0" y="38">
- <s:bitmapimage source="@Embed('mv.jpg')" width="400" height="272" x="0" y="-1">
- <s:textarea x="269" y="21" width="112" height="88" contentbackgroundalpha="0.0" borderalpha="0.39">
- </s:textarea></s:bitmapimage></s:group>
2.鼠标的划线
鼠标划线主要就是监听鼠标的事件,思路就是 在鼠标按下时图片处于可以编辑状态,拖动鼠标时划线,松开鼠标时划线结束
- private var mX:Number;
- private var mY:Number;
- private var IsDown:Boolean=false;
- private var path:String=new String();
- // 初始化函数
- private function init():void{
- myPanel.addEventListener(MouseEvent.MOUSE_DOWN,downHandler);
- myPanel.addEventListener(MouseEvent.MOUSE_MOVE,moveHandler);
- myPanel.addEventListener(MouseEvent.MOUSE_UP,upHandler);
- myPanel.graphics.lineStyle(2,0x0000ff,1);
- myPanel.graphics.moveTo(10,10);
- myPanel.graphics.curveTo(175,125,200,200);
- }
- private function downHandler(e:MouseEvent):void{
- IsDown=true;
- mX=myPanel.mouseX;
- mY=myPanel.mouseY;
- }
- private function upHandler(e:MouseEvent):void{
- IsDown=false;
- trace(path);
- }
- private function moveHandler(e:MouseEvent):void{
- if(IsDown){
- var x:Number = myPanel.mouseX;
- var y:Number = myPanel.mouseY;
- myPanel.graphics.lineStyle(_lineSize,_lineColor,1);
- myPanel.graphics.moveTo(mX,mY);
- myPanel.graphics.lineTo(x,y);
- mX=x;
- mY=y;
- }
- }
3.得到编辑后字节码
- var png:PNGEncoder=new PNGEncoder();
- var srcBit:BitmapData = new BitmapData(myPanel.width,myPanel.height);
- srcBit.draw(myPanel);
- var data:ByteArray=srcBit.getPixels(new Rectangle(0,0,myPanel.width,myPanel.height));
- var image:ByteArray=png.encodeByteArray(data,myPanel.width,myPanel.height);
上面代码得到png格式的图片编码
4.上传字节码到服务器
- var hander:URLRequestHeader=new URLRequestHeader("Content-type","application/octet-stream");
- var request:URLRequest =new URLRequest("http://iyang/FlexUpload/DoServletUpload");
- request.requestHeaders.push(hander);
- request.method="POST";
- request.data=image;
- var load:URLLoader=new URLLoader(request);
- load.addEventListener(Event.COMPLETE,function(evt){
- Alert.show("保存成功");
- });
servlet使用request.getInputStream();得到字节流。
上面的功能经实现了所需要的功能
flex4 通过 FileReference可以实现将图片保存到本地,直接用得到的image的ByteArray就可以了
var file:FileReference=new FileReference();
file.save(image,”edit.png”);
这样就会弹出保存图片的对话框