国庆期间“头像+国旗”玩法是如何实现的?
前言
随着一年一度的国庆假期越来越近,身边的国庆氛围也越来越重,很多人也开始换上了渐变国旗头像,提前为祖国母亲庆生。那每年都很火的渐变国旗头像要如何制作呢?其实一点也不难!接下来就分享一种渐变国旗头像
生成方法。
制作原理
上传原始微信或其他头像,将头像的Image
对象用Graphics
创建返回GDI+
对象,然后用GDI+
对象在原始头像指定位置进行追加绘制指定大小的图像渲染显示。
项目架构设计
演示项目为Winform窗体应用程序,项目具体信息如下:
项目框架:
.NET Framework 4.8
项目架构和窗体设计:
五星红旗模板准备:
代码实现
选择头像代码:
/// <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("保存成功");
}
}
效果演示
源码工具获取
关注公众号,后台回复关键字:五星红旗头像
友情提示:仅供学习研究使用,切勿非法使用!
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/17735279.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。