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>