Flex端利用new PNGEncoder().encode(bitmapData)将png图片转换为ByteArray,然后传给服务器,服务端需要定义一个public ByteArray UploadImage(ByteArray ba)方法
服务器端相关代码
using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Drawing; using System.Web; using FluorineFx; using FluorineFx.AMF3; namespace ServiceLibrary5 { [RemotingService]public class
ByteStreamService {public
ByteArray UploadImage(ByteArray ba) { MemoryStream ms =new
MemoryStream(ba.GetBuffer()); Image img = Bitmap.FromStream(ms); Bitmap newImage =new
Bitmap(img); MemoryStream tempStream =new
MemoryStream(); newImage.Save(tempStream, System.Drawing.Imaging.ImageFormat.Png); string path = HttpContext.Current.Server.MapPath("UpLoad/ByteArray.png"
); FileStream fs =new
FileStream(path, FileMode.Create); tempStream.WriteTo(fs); fs.Close(); ByteArray result =new
ByteArray(tempStream);return
result; } } }
Flex端相关代码
<?xml version="1.0"
encoding="utf-8"
?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
> <mx:Panel x="28"
y="58"
width="364"
height="417"
layout="absolute"
> <mx:Canvas id="myCanvas"
x="0"
y="0"
width="334"
height="331"
mouseDown="onMouseDown()"
mouseUp="onMouseUp()"
mouseMove="onMouseMove()"
> </mx:Canvas> <mx:ControlBar x="135"
y="459"
> <mx:ColorPicker change="curColor = event.target.selectedColor"
/> <mx:Button label="清空"
click="onClear()"
/> <mx:Button label="保存"
click="onSave()"
/> </mx:ControlBar> </mx:Panel> <mx:Image id="imgBox"
x="462"
y="83"
/> <mx:Script> <![CDATA[import
mx.core.UIComponent;import
mx.containers.Box;import
mx.controls.Alert;import
mx.rpc.events.ResultEvent;import
mx.graphics.codec.PNGEncoder;private var
flag:Boolean =false
;private var
startX:int;private var
startY:int;private var
curColor:uint = 0x000000;private function
onSave():void
{var
bd:BitmapData =new
BitmapData(myCanvas.width,myCanvas.height); bd.draw(myCanvas);var
byteArray:ByteArray =new
PNGEncoder().encode(bd);var
nc:NetConnection =new
NetConnection(); nc.client = this;var
responder:Responder =new
Responder(onResult,onStatus); nc.connect("http://localhost:9782/Web/Gateway.aspx"
); nc.call("ServiceLibrary5.ByteStreamService.UploadImage"
,responder,byteArray); }private function
onResult(result:ByteArray):void
{//利用Loader读取图片var
loader:Loader =new
Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete); loader.loadBytes(result); }private function
onComplete(event:Event):void
{//利用UIComponent加载Loader对象var
loader:Loader = (event.targetas
LoaderInfo).loader; loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onComplete);var
pictureHolder:UIComponent =new
UIComponent(); pictureHolder.addChild(loader);this
.imgBox.width = myCanvas.width;this
.imgBox.height = myCanvas.height;this
.imgBox.addChild(pictureHolder); }private function
onStatus(obj:Object):void
{ Alert.show(obj.code.toString()); }private function
onClear():void
{ myCanvas.graphics.clear(); }private function
onMouseDown():void
{ startX = myCanvas.mouseX; startY = myCanvas.mouseY; flag =true
; }private function
onMouseUp():void
{ flag =false
; }private function
onMouseMove():void
{if
(flag) { myCanvas.graphics.moveTo(startX,startY); myCanvas.graphics.lineStyle(2,curColor); myCanvas.graphics.lineTo(myCanvas.mouseX,myCanvas.mouseY); startX = myCanvas.mouseX; startY = myCanvas.mouseY; } } ]]> </mx:Script> </mx:Application>