data url生成工具c#版 第二版-尊龙官方平台

data url生成工具c#版 第二版

el/2024/3/25 20:43:47

为什么有第二版


  首先感谢 jenlynn 同学的留言“data url两种生成方式,c#和html5 两者同一张生成的base64编码貌似不一样,能有什么方法让他们达成一致吗”。

  其次,在研究这个问题时发现了bug和异常。
bug:图片编码判断问题,不管什么扩展名的都默认使用了png编码。
异常:检测到 contextswitchdeadlock

界面预览


针对相关问题的改进方法


图片编码判断问题

之前主要是忘记了获取的扩展名前面是带点.的
相关代码:

string ext = path.getextension(path).tolower();//根据文件的扩展名确定使用的编码格式//注意扩展名是带点的!switch (ext){case ".gif":fmt = system.drawing.imaging.imageformat.gif;break;case ".jpg":case ".jpeg":fmt = system.drawing.imaging.imageformat.jpeg;break;case ".ico":fmt = system.drawing.imaging.imageformat.icon;break;default:ext = "png";break;}

检测到 contextswitchdeadlock

解决方法说明
stackoverflow提到使用backgroundworker,我这里使用线程;但是经过测试发现:由于textbox显示大文本时的性能问题,线程与textbox交互时,如果用户不操作的话,窗口不会死;一旦有任何操作,窗口就是不响应!
所以只能改变尊龙官方平台的解决方案,使用折中的办法,不让textbox显示全部的dataurl字符串,只显示其中的一部分;使用一个变量“”来保存完整的dataurl字符串,点击复制按钮时将其copy到windows剪贴板中。
相关代码

        /// /// 用于保存完整的dataurl/// private string fulldataurl = string.empty;

使用线程

                //创建线程来生成dataurlsystem.threading.thread thd = new system.threading.thread(new parameterizedthreadstart(builddataurl));thd.start(textbox_savedir.text);

使用委托

        /// /// textbox委托,用于实现线程中访问窗体、组件等的线程安全性/// /// public delegate void textbox_delegate(string msg);/// /// textbox委托实现,用于实现线程中访问窗体、组件等的线程安全性/// /// public void textboxset(string msg){if (textbox1 == null) return;if (textbox1.invokerequired){textbox_delegate dt = new textbox_delegate(textboxset);textbox1.invoke(dt, new object[] { msg });}else{int strlen = msg.length;int step = 100;while (strlen > step){textbox1.appendtext(msg.substring(msg.length - strlen, step));strlen -= step;}textbox1.appendtext(msg.substring(msg.length - strlen, strlen));}}

优化base64编码

                //计算base64编码的字符串后部分有多少可以省略的字符int strlen = str.length;string dyzf = str.substring(strlen - 1, 1);while ((dyzf == "a" || dyzf == "=") && strlen > 0){strlen -= 1;dyzf = str.substring(strlen - 1, 1);}//组合完整的data urlfulldataurl = "   ext   ";base64,"  str.substring(0, strlen)  "\" width=\""   img.width   "\" height=\""   img.height   "\" />";//这里定义textbox最多只显示20000个字符,多余的裁掉不显示了,不然性能太差。int showlen = 20000;if (showlen > fulldataurl.length){showlen = fulldataurl.length;}textboxset(fulldataurl.substring(0, showlen));
        /// /// 将完整的data url复制到windows剪贴板中。/// /// /// private void button_copy_click(object sender, eventargs e){clipboard.settext(fulldataurl);}
        /// /// 清空文本框/// /// /// private void button_clear_click(object sender, eventargs e){textbox1.clear();fulldataurl = string.empty;}

完整源码下载


data url生成工具c#版 第二版完整源码下载
资源分定的比较高,下载后评论会返还的。

相关文章


用visual studio 2010编写data url生成工具c#版
检测到 contextswitchdeadlock
data url生成工具之html5 filereader实现

提出一个问题


c#如何高效的向textbox写入一个很长的字符串?

鄙人不才,几番努力都未能解决这个问题,特在此向大家学习请教!


http://www.ngui.cc/el/5128065.html

相关文章

使用泛型 类型system.collections.generic.keyvaluepair需要2个类型参数

c#在准备使用system.collections.generic.keyvaluepair遍历的hashtable时候,代码却提示有错误: 这其实是个非常简单的错误,eclipse中通过工具弹出的提示解决方法,点下鼠标就能解决问题的,visual studio 2010却不行。…

c# for 应输入;

错误代码: //遍历哈希表需要用到dictionaryentry object,代码如下:for (keyvaluepair de in ht) //ht为一个hashtable实例{console.writeline(de.key);//de.key对应于keyvalue键值对keyconsole.writeline(de.value);//de.…

收到csdn job送的鼠标垫我都惊呆了……

收到csdn job送的鼠标垫我都惊呆了…… 你见过如此之大的鼠标垫吗? 才发现原来鼠标垫还可以这样用!

can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接的主机没有响应,连接尝试失败。

svn服务器信息: 操作系统:centos 6.5 svn版本: svn --version svn, version 1.8.11 (r1643975)compiled apr 27 2015, 03:11:15 on x86_64-unknown-linux-gnu尊龙凯时官方 copyright (c) 2014 the apache software foundation. this software consists of contributions made by many p…

svn: e160043: unable to connect to a repository at url

操作系统:centos 6.5 svn版本:1.8.11 刚安装的svn,新创建的版本库, 使用svn list svn://192.167.1.81/allproject测试的时候提示以下错误: [rootlocalhost svn]# svn list svn://192.167.1.81/allproject svn: e16…

centos开机自动启动svn服务的方法

centos开机自动启动svn服务的方法 1、编辑rc.local文件 vi /etc/rc.d/rc.local 2、加入如下启动命令 /usr/bin/svnserve -d -r /home/svn 注意: 我们在用终端操作的时候,可以直接使用以下命令启动svn: svnserve -d -r /home/svn 但是在…

when you start windows 7: the windows boot configuration data file is missing required information

when you start windows 7, you receive the following error message: file: \boot\bcd status: 0xc0000034 info: the windows boot configuration data file is missing required information 微软官方帮助文档: 当您启动 windows vista 的错误消息ÿ…

centos -bash: ./xxx/make: no such file or directory

在安装mpfr时出现以下错误: -bash: ./mpfr-3.1.2/make: no such file or directory [root@localhost opt]# ./mpfr-3.1.2/make -bash: ./mpfr-3.1.2/make: no such file or directory [root@localhost opt]# /opt/mpfr-3.1.2/make -bash: /opt/mpfr-3.1.2/make: no such fil…

configure: error: libmpfr not found or uses a different abi (including static vs shared).

配置mpc的时候提示此错误: configure: error: libmpfr not found or uses a different abi (including static vs shared). mpc下载: wget ftp://gnu.mirror.iweb.com/mpc/mpc-1.0.1.tar.gz 问题原因: 缺少mpfr,下载地址 http://www.mpfr.org/mpfr…

centos .tar.gz .tar.xz .tar.bz2 .tar.lz文件的解压方法

从网络上下载到的源码包, 最常见的是 .tar.gz .tar.bz2包, 还有一部分是 .tar.xz .tar.lz的包。 有人说 .tar.xz 是压缩率之王,但从下图看.tar.lz的压缩率更高一些: .tar.gz .tar.bz2要解压很简单 : .tar.gz 格式…
网站地图