小草

我是一棵小小草。
posts - 194, comments - 393, trackbacks - 19, articles - 8

本文环境 C# vs2005 windowxp
首先通过控件的方式调用windows api来截图,然后返回base64的字符串,因为file类型(文件上传控件)的控件没有方法可以写入路径,所以不能用添加附件的形式来上传截到的图片。所以客户端控件截图后返回的必须是Base64的字符串,放于表单中的一个隐藏框中。

在服务器接收的过程处理。接收的时候用请求的方式取得字符串的内容,然后再转换成字节,然后保存成图片,就实现了截图并存于服务器的功能。

详细代码参考如下:
取得图片的base64编码参考(客户端控件实现,只做参考)
        string sFile = "c:\\1.gif";
        Image img = Image.FromFile(sFile);

        MemoryStream ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//用BMP的方式不会进行压缩这样出来的文件大小就会一样
        byte[] bytes = ms.GetBuffer();

        this.TextBox1.Text = Convert.ToBase64String(bytes);


转成Base64后形成的字符串如:
R0lGODlhAAUgA+MAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8

         服务器端接收字符串信息,并存成图片参考。
        byte[] bytelist;
        bytelist = Convert.FromBase64String(this.TextBox1.Text);
        //byte[] bytelist = bytes;
        MemoryStream ms1 = new MemoryStream(bytelist);
        Bitmap bm = (Bitmap)Image.FromStream(ms1);

        bm.Save("c:\\2.gif", System.Drawing.Imaging.ImageFormat.Gif);

Feedback

#1楼    回复  引用    

2007-10-29 10:31 by creakmud [未注册用户]
既然能调用控件,为何不直接通过控件把数据传回服务起呢?

#2楼    回复  引用  查看    

2007-10-29 11:39 by 大石头      
控件上传文件挺麻烦的,好不如LZ的方法来得简单

#3楼    回复  引用  查看    

2007-10-29 14:02 by zoti      
跟題目不太符吧?講的內容好像是如何上傳呀.

#4楼    回复  引用  查看    

2007-10-29 15:17 by t-mac.NET      
--引用--------------------------------------------------
zoti: 跟題目不太符吧?講的內容好像是如何上傳呀.
--------------------------------------------------------


看得晕呼

#5楼    回复  引用  查看    

2007-10-29 16:11 by 路过秋天      
标题党..郁闷...

#6楼 [楼主]   回复  引用  查看    

2007-10-30 10:12 by 小草      
有多种方法,我只是介绍了一下这种方法,这种方法的妙处在于可以使用别人的客户端控件,比如招行的客户系统中的截图控件。而且上传文件可以不通过file文件框来操作。因为这个控件不允许设置文件名的属性(当然也是出于安全考虑)

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: