本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~
近来要把一个单机软件简单的绘图功能放到WEB上,斟酌常识了诸多方案,如果是单纯的保存图片再简单不过了,但绘制的数据要记载,要与服务器交互,绘制逻辑比较复杂,用AJAX在交互及业务上会相当大的工作量;自定义控件在交互和效率上也没任何优势。无法终究还是觉得FLASH要好的多。
Flash绘图比较简单,但本身不支持JPG等格式编码,须要FLEX的库,无法不想搞的太复杂,只能用第三方封装的库' com.adobe.images.JPGEncoder':
https://github.com/mikechambers/as3corelib/downloads
Flash代码:
import flash.display.BitmapData;
//引用第三方库
import com.adobe.images.JPGEncoder;
stop();
//保存按腻
btn_save.addEventListener(MouseEvent.CLICK, bt_save_event);
function bt_save_event(event:MouseEvent) : void{
doSave();
return;
}// end function
function doSave(){
//从MC获取位图
var jpgSource:BitmapData = new BitmapData (mc_test.width, mc_test.height);
jpgSource.draw(mc_test);
var jpgEncoder:JPGEncoder = new JPGEncoder(85);
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
//保存在客户端
//var file:FileReference = new FileReference();
//file.save(jpgStream,"test.jpg");
//请求服务器
var jpgURLRequest:URLRequest = new URLRequest("ScreenSplitHandler.ashx");
//HTTP头
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var _loader:URLLoader = new URLLoader();
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;
_loader.addEventListener(Event.COMPLETE,completeHandler);
_loader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
_loader.load(jpgURLRequest);
}
function completeHandler(evt:Event):void {
txt_msg.text = "胜利";
trace(URLLoader(e.target).data );//
}
function ioErrorHandler(evt:IOErrorEvent):void {
txt_msg.text = "失败";
}
Asp.net代码:
这里用了ashx文件,只帖核心代码:
context.Response.ClearContent();
//响应输出类型(用于FLASH接收返回)
context.Response.ContentType = "text/plain";
//这里看到网上有些应用的是第三方库来接收的,因为C#没有bytearray,实际上bytearray就是byte[]啊--!
byte[] _bmp = context.Request.BinaryRead(context.Request.ContentLength);
MemoryStream ms = new MemoryStream(_bmp);
System.Drawing.Image img = Bitmap.FromStream(ms);
Bitmap bmp = new Bitmap(img);
MemoryStream tempStream = new MemoryStream();
bmp.Save(tempStream, ImageFormat.Jpeg);
FileStream fs = new FileStream("test.jpg", FileMode.Create);
tempStream.WriteTo(fs);
tempStream.Close();
tempStream.Dispose();
fs.Close();
fs.Dispose();
以上。
文章结束给大家分享下程序员的一些笑话语录:
女人篇
有的女人就是Windows虽然很优秀,但是安全隐患太大。
有的女人就是MFC她条件很好,然而不是谁都能玩的起。
有的女人就是C#长的很漂亮,但是家务活不行。
有的女人就是C++,她会默默的为你做很多的事情。
有的女人就是汇编虽然很麻烦,但是有的时候还得求它。
有的女人就是SQL,她会为你的发展带来莫大的帮助。