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


    首先参照了这篇文章:C# 图片打包成DLL文件进行调用_png转dll-CSDN博客,感谢大神!

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

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

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

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Drawing;
    4. using System.IO;
    5. using System.Linq;
    6. using System.Reflection;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. namespace EmojiImg
    10. {
    11. public class Class1
    12. {
    13. public Class1()
    14. {
    15. }
    16. public System.IO.Stream GetPng(string name)
    17. {
    18. Assembly asm = Assembly.GetExecutingAssembly();
    19. string name2 = asm.GetName().Name;
    20. System.IO.Stream ss = this.GetType().Assembly.GetManifestResourceStream(name2 + ".ico." + name);
    21. return ss;
    22. }
    23. ///
    24. /// 根据名称从dll中读取图片,返回image
    25. ///
    26. ///
    27. ///
    28. public Image GetImg(string name)
    29. {
    30. Assembly asm = Assembly.GetExecutingAssembly();
    31. string name2 = asm.GetName().Name;
    32. Image img;
    33. img=Image.FromStream(asm.GetManifestResourceStream(name2 + ".ico." + name));
    34. return img;
    35. }
    36. ///
    37. /// 根据图片名称读取图片,返回图片的base64,用于网页显示
    38. ///
    39. ///
    40. ///
    41. public string ImageToBase64(string name)
    42. {
    43. try
    44. {
    45. Assembly asm = Assembly.GetExecutingAssembly();
    46. string name2 = asm.GetName().Name;
    47. Bitmap bmp = new Bitmap(asm.GetManifestResourceStream(name2 + ".ico." + name));
    48. MemoryStream ms = new MemoryStream();
    49. bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    50. byte[] arr = new byte[ms.Length];
    51. ms.Position = 0;
    52. ms.Read(arr, 0, (int)ms.Length);
    53. ms.Close();
    54. return Convert.ToBase64String(arr);
    55. }
    56. catch (Exception ex)
    57. {
    58. return null;
    59. }
    60. }
    61. ///
    62. /// 根据图片名称读取图片,返回Bitmap
    63. ///
    64. ///
    65. ///
    66. public Bitmap GetBitmap(string name)
    67. {
    68. Assembly asm = Assembly.GetExecutingAssembly();
    69. string name2 = asm.GetName().Name;
    70. Bitmap bmp = new Bitmap(asm.GetManifestResourceStream(name2 + ".ico." + name));
    71. return bmp;
    72. }
    73. }
    74. }

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

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

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

    1. public string GetRichToHtml(string message)
    2. {
    3. string msg;
    4. string fname;
    5. string imgBase64;
    6. int num = 1;
    7. string[] EmojiName = { "[微笑]","[爱慕]","[惊呆]","[酷拽]","[抠鼻]","[流泪]","[发怒]","[呲牙]","[鼾睡]","[害羞]","[可爱]","[晕]","[衰]","[闭嘴]","[机智]","[作揖]"};
    8. msg = "";
    9. //从本地调用的dll中读取
    10. foreach (string name in EmojiName)
    11. {
    12. imgBase64 = "";
    13. fname = "emoji_" + (num).ToString() + ".png";
    14. imgBase64 = imgdll.ImageToBase64(fname);
    15. message = message.Replace(name, "");
    16. num += 1;
    17. }
    18. msg = message;
    19. return msg;
    20. }

  • 相关阅读:
    TypeScript基础内容(1)
    实现地图遮罩 leaflet
    vue-router路由懒加载
    嵌入式硬件中PCB走线与过孔的电流承载能力分析
    再探格林公式、斯托克斯公式、高斯公式
    87.(cesium篇)cesium热力图(贴地形)
    【深入理解C++】移动构造函数和移动赋值运算符
    drone如何发布docker服务
    springboot中利用pagehelper结合mybatis实现分页查询(在vue利用element-plus控件展现)
    golang工程——gRPC keep alive 配置
  • 原文地址:https://blog.csdn.net/wjbych/article/details/133514129