前言 隨著一年一度的國慶假期越來越近,身邊的國慶氛圍也越來越重,很多人也開始換上了漸變國旗頭像,提前為祖國母親慶生。那每年都很火的漸變國旗頭像要如何製作呢?其實一點也不難!接下來就分享一種漸變國旗頭像生成方法。 製作原理 上傳原始微信或其他頭像,將頭像的Image對象用Graphics創建返回GDI ...
前言
隨著一年一度的國慶假期越來越近,身邊的國慶氛圍也越來越重,很多人也開始換上了漸變國旗頭像,提前為祖國母親慶生。那每年都很火的漸變國旗頭像要如何製作呢?其實一點也不難!接下來就分享一種漸變國旗頭像
生成方法。
製作原理
上傳原始微信或其他頭像,將頭像的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
建群聲明: 本著技術在於分享,方便大家交流學習的初心,特此建立【編程內功修煉交流群】,為大家答疑解惑。熱烈歡迎各位愛交流學習的程式員進群,也希望進群的大佬能不吝分享自己遇到的技術問題和學習心得!進群方式:掃碼關註公眾號,後臺回覆【進群】。