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

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

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

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

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

cs 复制代码
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命名

cs 复制代码
 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;
        }
相关推荐
格林威27 分钟前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
Arbori_2621543 分钟前
Rider 调试 VisionMaster C# 用户脚本
c#·visionmaster
小大宇1 小时前
Python 集成 Conda
开发语言·python·conda
还是奇怪1 小时前
Simon Willison 用 DSPy 优化 Datasette Agent 提示词:提示工程正在变成可测试的软件工程
java·开发语言·软件工程
小大宇2 小时前
python flask框架 SSE流式返回、跨域、报错
开发语言·python·flask
Legendary_0082 小时前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频
柒星栈3 小时前
PHP 源码怎么加密防破解?三套方案实战指南
开发语言·php·android studio
勉灬之3 小时前
Next.js + Prisma 跨平台部署踩坑记
开发语言·javascript·ecmascript
这是个栗子3 小时前
前端开发中的常用工具函数(九)
开发语言·javascript·ecmascript·at
蓝创工坊Blue Foundry3 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel