2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

C#打包表情图片至Dll文件中供winform中调用

时间:10-20来源:作者:点击数:30

想在winform里做个表情选择的界面,如果表情图片直接放在本地的话会造成更改或删除,给程序带来不确定的因素,还是直接把图片打包进dll中用起来方便,前期直接参考上面那位大神的文章。

表情类png图片从哪里搞呀,如果自用的话就从头条的网页端把表情图片下载回来就可以了,我把表情图片放到了ico文件夹中,记得一定要把图片设置为:右键图片->属性->生成操作:嵌入的资源,多个图片可以一次性全部选中进行设置。

就一个class1文件,复制好以后直接运行,虽然单个dll无法运行,但会生成你需要的dll文件,引用到其他项目中就可以使用了。

  • using System;
  • using System.Collections.Generic;
  • using System.Drawing;
  • using System.IO;
  • using System.Linq;
  • using System.Reflection;
  • using System.Text;
  • using System.Threading.Tasks;
  • namespace EmojiImg
  • {
  • public class Class1
  • {
  • public Class1()
  • {
  • }
  • public System.IO.Stream GetPng(string name)
  • {
  • Assembly asm = Assembly.GetExecutingAssembly();
  • string name2 = asm.GetName().Name;
  • System.IO.Stream ss = this.GetType().Assembly.GetManifestResourceStream(name2 + ".ico." + name);
  • return ss;
  • }
  • /// <summary>
  • /// 根据名称从dll中读取图片,返回image
  • /// </summary>
  • /// <param name="name"></param>
  • /// <returns></returns>
  • public Image GetImg(string name)
  • {
  • Assembly asm = Assembly.GetExecutingAssembly();
  • string name2 = asm.GetName().Name;
  • Image img;
  • img=Image.FromStream(asm.GetManifestResourceStream(name2 + ".ico." + name));
  • return img;
  • }
  • /// <summary>
  • /// 根据图片名称读取图片,返回图片的base64,用于网页显示
  • /// </summary>
  • /// <param name="name"></param>
  • /// <returns></returns>
  • public string ImageToBase64(string name)
  • {
  • try
  • {
  • Assembly asm = Assembly.GetExecutingAssembly();
  • string name2 = asm.GetName().Name;
  • Bitmap bmp = new Bitmap(asm.GetManifestResourceStream(name2 + ".ico." + name));
  • MemoryStream ms = new MemoryStream();
  • bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
  • byte[] arr = new byte[ms.Length];
  • ms.Position = 0;
  • ms.Read(arr, 0, (int)ms.Length);
  • ms.Close();
  • return Convert.ToBase64String(arr);
  • }
  • catch (Exception ex)
  • {
  • return null;
  • }
  • }
  • /// <summary>
  • /// 根据图片名称读取图片,返回Bitmap
  • /// </summary>
  • /// <param name="name"></param>
  • /// <returns></returns>
  • public Bitmap GetBitmap(string name)
  • {
  • Assembly asm = Assembly.GetExecutingAssembly();
  • string name2 = asm.GetName().Name;
  • Bitmap bmp = new Bitmap(asm.GetManifestResourceStream(name2 + ".ico." + name));
  • return bmp;
  • }
  • }
  • }

ImageToBase64是用来根据图片名称返回图片的base64编码,这里设置的图片类型是png,在web中使用时它是透明背景的。

在winform中聊天框怎么写了?不管用第三方的控件框还是用web实现,要么授权需要花钱,要么代码不全难实现,也是走了不少弯路,最后通过简单粗暴的方法实现的。聊天框直接用textbox多行文本框来实现,然后在它上面放一个同样大小的webBrowser控件,然后设置为隐藏,等用户选择了表情后在文本中显示的是文字,点预览或收到带表情的消息时,直接放到webBrowser中进行显示就可以了,很是完美。

例如收到一段带有表情文字的字符串,那么进行解析,表情文字的顺序就是图片的顺序,简单粗暴从emoji_1~N命名

  • public string GetRichToHtml(string message)
  • {
  • string msg;
  • string fname;
  • string imgBase64;
  • int num = 1;
  • string[] EmojiName = { "[微笑]","[爱慕]","[惊呆]","[酷拽]","[抠鼻]","[流泪]","[发怒]","[呲牙]","[鼾睡]","[害羞]","[可爱]","[晕]","[衰]","[闭嘴]","[机智]","[作揖]"};
  • msg = "";
  • //从本地调用的dll中读取
  • foreach (string name in EmojiName)
  • {
  • imgBase64 = "";
  • fname = "emoji_" + (num).ToString() + ".png";
  • imgBase64 = imgdll.ImageToBase64(fname);
  • message = message.Replace(name, "<img src='data:image/png;base64," + imgBase64 + "' width='36' height='36' />");
  • num += 1;
  • }
  • msg = message;
  • return msg;
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐