翼度科技»论坛 编程开发 .net 查看内容

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

1

主题

1

帖子

3

积分

新手上路

Rank: 1

积分
3
前言

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

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

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

.NET Framework 4.8
项目架构和窗体设计:


五星红旗模板准备:


代码实现

选择头像代码:
  1. /// <summary>
  2.         /// 选择头像
  3.         /// </summary>
  4.         /// <param name="sender"></param>
  5.         /// <param name="e"></param>
  6.         private void btn_select_Click(object sender, EventArgs e)
  7.         {
  8.             OpenFileDialog openFileDialog = new OpenFileDialog();
  9.             openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);//初始路径为桌面
  10.             openFileDialog.Filter = "头像图片|*.png;*.jpg";
  11.             if (openFileDialog.ShowDialog() == DialogResult.OK)
  12.             {
  13.                 pic_old.Image = Image.FromFile(openFileDialog.FileName);
  14.             }
  15.         }
  16.       
复制代码
生成和切换模板代码
  1. /// <summary>
  2.         /// 生成或切换模板事件
  3.         /// </summary>
  4.         /// <param name="sender"></param>
  5.         /// <param name="e"></param>
  6.         private void btn_change_Click(object sender, EventArgs e)
  7.         {
  8.             GenerateOrChangeTemplate();
  9.         }
  10.         
  11.         /// <summary>
  12.         /// 生成头像或切换模板生成头像
  13.         /// </summary>
  14.         private void GenerateOrChangeTemplate()
  15.         {
  16.             try
  17.             {
  18.                 if (templateFileInfos.Length == 0)
  19.                 {
  20.                     MessageBox.Show("红旗模板集为空,请添加", "提示", MessageBoxButtons.OK);
  21.                     return;
  22.                 }
  23.                 if (index >= templateFileInfos.Length)
  24.                 {
  25.                     index = 0;
  26.                 }
  27.                 Image head = (Image)pic_old.Image.Clone();
  28.                 Image template = Image.FromFile(templateFileInfos[index].FullName);
  29.                 Graphics graphics = Graphics.FromImage(head);
  30.                 if (templateFileInfos[index].Name.StartsWith("all_"))
  31.                 {
  32.                     graphics.DrawImage(template, 0, 0, head.Width, head.Height);
  33.                 }
  34.                 else if (templateFileInfos[index].Name.StartsWith("right_"))
  35.                 {
  36.                     int x = head.Width / 4 * 3;
  37.                     int y = head.Height / 4 * 3;
  38.                     int w = head.Width / 4;
  39.                     int h = head.Height / 4;
  40.                     graphics.DrawImage(template, x, y, w, h);
  41.                 }
  42.                 else if (templateFileInfos[index].Name.StartsWith("left_"))
  43.                 {
  44.                     int y = head.Height - template.Height;
  45.                     if (y < 0) y = 0;
  46.                     graphics.DrawImage(template, 0, y, head.Width, head.Height);
  47.                 }
  48.                 pic_new.Image = head;
  49.                 index++;
  50.             }
  51.             catch (Exception ex)
  52.             {
  53.                 MessageBox.Show("出错了:"+ ex.Message,"警号",MessageBoxButtons.OK);
  54.             }
  55.         }
复制代码
保存代码
  1. /// <summary>
  2.         /// 保存重新绘制的图片
  3.         /// </summary>
  4.         /// <param name="sender"></param>
  5.         /// <param name="e"></param>
  6.         private void btn_save_Click(object sender, EventArgs e)
  7.         {
  8.             SaveFileDialog saveFileDialog = new SaveFileDialog();
  9.             saveFileDialog.Filter = "图片文件|*.png";
  10.             if (saveFileDialog.ShowDialog() == DialogResult.OK)
  11.             {
  12.                 pic_new.Image.Save(saveFileDialog.FileName, ImageFormat.Png);
  13.                 MessageBox.Show("保存成功");
  14.             }
  15.         }
复制代码
效果演示


源码工具获取

关注公众号,后台回复关键字:五星红旗头像
友情提示:仅供学习研究使用,切勿非法使用!

来源:https://www.cnblogs.com/wml-it/archive/2023/09/28/17735279.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具