国庆期间“头像+国旗”玩法是如何实现的?

国庆,期间,头像,国旗,玩法,如何,实现 · 浏览次数 : 246

小编点评

**渐变国旗头像生成方法** **步骤:** 1. **获取原始头像:** 从本地文件系统或微信应用程序中读取原始国旗头像的Image对象。 2. **选择头像:** 创建一个打开文件对话框,允许用户选择一张头像图片。 3. **生成模板:** 从模板文件中加载所需的图像。 4. **添加模板:** 将模板图像绘制到原始头像上,根据图片的中心位置进行调整。 5. **保存重新绘制的头像:** 将修改后的头像保存为PNG文件。 **代码示例:** ```csharp public partial class Form1 : Form { private Image pic_old; private Image template; private void btn_select_Click(object sender, EventArgs e) { // 创建打开文件对话框 OpenFileDialog openFileDialog = new OpenFileDialog(); // 设置初始目录 openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // 设置过滤条件 openFileDialog.Filter = "头像图片|*.png;*.jpg"; // 显示打开文件对话框 if (openFileDialog.ShowDialog() == DialogResult.OK) { // 设置原始头像的Image对象 pic_old.Image = Image.FromFile(openFileDialog.FileName); } } private void GenerateOrChangeTemplate() { // 检查模板集是否为空 if (templateFileInfos.Length == 0) { // 显示提示信息 MessageBox.Show("红旗模板集为空,请添加"); return; } // 获取模板图像 index = (index + 1) % templateFileInfos.Length; template = Image.FromFile(templateFileInfos[index].FullName); // 创建 Graphics 对象 Graphics graphics = Graphics.FromImage(pic_old.Image); // 添加模板图像 if (templateFileInfos[index].Name.StartsWith("all_")) { // 从模板中绘制全图 graphics.DrawImage(template, 0, 0, pic_old.Width, pic_old.Height); } else if (templateFileInfos[index].Name.StartsWith("right_")) { // 从模板中绘制右侧部分 int x = pic_old.Width / 4 * 3; int y = pic_old.Height / 4 * 3; int w = pic_old.Width / 4; int h = pic_old.Height / 4; graphics.DrawImage(template, x, y, w, h); } // 其他添加模板图像逻辑 ... // 更新原始头像的Image对象 pic_old.Image = head; } private void btn_save_Click(object sender, EventArgs e) { // 创建保存文件对话框 SaveFileDialog saveFileDialog = new SaveFileDialog(); // 设置文件过滤条件 saveFileDialog.Filter = "图片文件|*.png"; // 显示打开文件对话框 if (saveFileDialog.ShowDialog() == DialogResult.OK) { // 保存重新绘制的头像 pic_new.Image.Save(saveFileDialog.FileName, ImageFormat.Png); // 显示保存成功信息 MessageBox.Show("保存成功"); } } } ``` **注意:** * 该代码仅供学习研究使用,切勿非法使用! * 请确保模板图像与原始图像的格式相同。

正文

前言

随着一年一度的国庆假期越来越近,身边的国庆氛围也越来越重,很多人也开始换上了渐变国旗头像,提前为祖国母亲庆生。那每年都很火的渐变国旗头像要如何制作呢?其实一点也不难!接下来就分享一种渐变国旗头像生成方法。

制作原理

上传原始微信或其他头像,将头像的Image对象用Graphics创建返回GDI+对象,然后用GDI+对象在原始头像指定位置进行追加绘制指定大小的图像渲染显示。

项目架构设计

演示项目为Winform窗体应用程序,项目具体信息如下:

项目框架:

.NET Framework 4.8

项目架构和窗体设计:

image

五星红旗模板准备:

image

代码实现

选择头像代码:
 /// <summary>
        /// 选择头像
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_select_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);//初始路径为桌面
            openFileDialog.Filter = "头像图片|*.png;*.jpg";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                pic_old.Image = Image.FromFile(openFileDialog.FileName);
            }
        }
      
生成和切换模板代码
 /// <summary>
        /// 生成或切换模板事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_change_Click(object sender, EventArgs e)
        {
            GenerateOrChangeTemplate();
        }
        
        /// <summary>
        /// 生成头像或切换模板生成头像
        /// </summary>
        private void GenerateOrChangeTemplate()
        {
            try
            {
                if (templateFileInfos.Length == 0)
                {
                    MessageBox.Show("红旗模板集为空,请添加", "提示", MessageBoxButtons.OK);
                    return;
                }

                if (index >= templateFileInfos.Length)
                {
                    index = 0;
                }
                Image head = (Image)pic_old.Image.Clone();
                Image template = Image.FromFile(templateFileInfos[index].FullName);
                Graphics graphics = Graphics.FromImage(head);

                if (templateFileInfos[index].Name.StartsWith("all_"))
                {
                    graphics.DrawImage(template, 0, 0, head.Width, head.Height);
                }
                else if (templateFileInfos[index].Name.StartsWith("right_"))
                {
                    int x = head.Width / 4 * 3;
                    int y = head.Height / 4 * 3;
                    int w = head.Width / 4;
                    int h = head.Height / 4;
                    graphics.DrawImage(template, x, y, w, h);
                }
                else if (templateFileInfos[index].Name.StartsWith("left_"))
                {
                    int y = head.Height - template.Height;
                    if (y < 0) y = 0;
                    graphics.DrawImage(template, 0, y, head.Width, head.Height);
                }
                pic_new.Image = head;
                index++;
            }
            catch (Exception ex)
            {
                MessageBox.Show("出错了:"+ ex.Message,"警号",MessageBoxButtons.OK);
            }
        }
保存代码
 /// <summary>
        /// 保存重新绘制的图片
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_save_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "图片文件|*.png";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                pic_new.Image.Save(saveFileDialog.FileName, ImageFormat.Png);
                MessageBox.Show("保存成功");
            }
        }

效果演示

image

源码工具获取

关注公众号,后台回复关键字:五星红旗头像

友情提示:仅供学习研究使用,切勿非法使用!

与国庆期间“头像+国旗”玩法是如何实现的?相似的内容:

国庆期间“头像+国旗”玩法是如何实现的?

前言 随着一年一度的国庆假期越来越近,身边的国庆氛围也越来越重,很多人也开始换上了渐变国旗头像,提前为祖国母亲庆生。那每年都很火的渐变国旗头像要如何制作呢?其实一点也不难!接下来就分享一种渐变国旗头像生成方法。 制作原理 上传原始微信或其他头像,将头像的Image对象用Graphics创建返回GDI

有限状态机在国际计费中的应用探索

今天的话题,我们从一个案例开始谈起。国际计费系统会定期自动生成账单,然后每个账单会按照预设的规则自动进入结算流程,账单从生成之后到结算完成,这期间需要销售支持、结算岗、客户(商家或服务商)、财务、资金等多个不同岗位角色的人员共同参与处理,每个角色处理的环节和操作内容不同,账单的状态也持续发生着改变。

全域Serverless化,华为云引领下一代云计算新范式

近日,华为开发者大会2023(Cloud)在东莞成功举办,期间“全域Serverless化,引领下一代云计算新范式”专题论坛人气满满。华为云首席产品官方国伟携手业界专家、客户、伙伴,面向广大开发者,分享了在Serverless领域的前沿思考和实践。

中证1000期指上市带来的交易机会

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 中证1000指数特征 近期,中金所新上市了中证1000指数的股指期货以及期权,自此,国内的期指共有4个交易标的(上证50、沪深300、中证500、中证1000)可供选择。研究新上市的中证1000期指标的,

.NET周刊【7月第2期 2024-07-14】

国内文章 开源GTKSystem.Windows.Forms框架让C# winform支持跨平台运行 https://www.cnblogs.com/easywebfactory/p/18289178 GTKSystem.Windows.Forms框架是一种C# winform应用程序跨平台界面开发

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架,用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用,

.NET周刊【6月第5期 2024-06-30】

国内文章 呼吁改正《上海市卫生健康信息技术应用创新白皮书》 C# 被认定为A 组件 的 错误认知 https://www.cnblogs.com/shanyou/p/18264292 近日,《上海市卫生健康“信息技术应用创新”白皮书》发布,提到医疗信创核心应用适配方法及公立医院信息系统。文章中对C#

.NET周刊【6月第4期 2024-06-23】

国内文章 C#.Net筑基-集合知识全解 https://www.cnblogs.com/anding/p/18229596 .Net中提供了数组、列表、字典等多种集合类型,分为泛型和非泛型集合。泛型集合具有更好的性能和类型安全性。集合的基础接口包括IEnumerator、IEnumerable、I

.NET周刊【6月第2期 2024-06-09】

国内文章 C#开源实用的工具类库,集成超过1000多种扩展方法 https://www.cnblogs.com/Can-daydayup/p/18230586 文章介绍了一个免费的C#工具类库Z.ExtensionMethods,可以通过NuGet包管理器轻松集成。该库支持.NET Standard

.NET周刊【6月第1期 2024-06-02】

国内文章 一文带你了解.NET能做什么? https://www.cnblogs.com/Can-daydayup/p/18214473 .NET是一个免费、开源、跨平台的开发平台框架,广泛应用于桌面、Web、移动、云服务、游戏、物联网、大数据和人工智能等领域开发。它支持C#、Visual Basi