國慶期間“頭像+國旗”玩法是如何實現的?

来源:https://www.cnblogs.com/wml-it/archive/2023/09/28/17735279.html
-Advertisement-
Play Games

前言 隨著一年一度的國慶假期越來越近,身邊的國慶氛圍也越來越重,很多人也開始換上了漸變國旗頭像,提前為祖國母親慶生。那每年都很火的漸變國旗頭像要如何製作呢?其實一點也不難!接下來就分享一種漸變國旗頭像生成方法。 製作原理 上傳原始微信或其他頭像,將頭像的Image對象用Graphics創建返回GDI ...


前言

隨著一年一度的國慶假期越來越近,身邊的國慶氛圍也越來越重,很多人也開始換上了漸變國旗頭像,提前為祖國母親慶生。那每年都很火的漸變國旗頭像要如何製作呢?其實一點也不難!接下來就分享一種漸變國旗頭像生成方法。

製作原理

上傳原始微信或其他頭像,將頭像的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

源碼工具獲取

關註公眾號,後臺回覆關鍵字:五星紅旗頭像

友情提示:僅供學習研究使用,切勿非法使用!

本文來自博客園,作者:碼農阿亮,轉載請註明原文鏈接: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

建群聲明: 本著技術在於分享,方便大家交流學習的初心,特此建立【編程內功修煉交流群】,為大家答疑解惑。熱烈歡迎各位愛交流學習的程式員進群,也希望進群的大佬能不吝分享自己遇到的技術問題和學習心得!進群方式:掃碼關註公眾號,後臺回覆【進群】。



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基本介紹 MyBatis-Plus (opens new window)(簡稱 MP)是一個 MyBatis (opens new window)的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。 MyBatis-Plus特性 無侵入:只做增強不做改變,引入它不會對 ...
  • 在Java中,Serializable是一個標記介面(marker interface),用於指示一個類的對象可以被序列化。序列化是將對象轉換為位元組流的過程,可以將對象保存到文件、在網路上傳輸或在記憶體中傳遞。 當一個類實現了Serializable介面時,它表示該類的對象可以被序列化和反序列化。 序 ...
  • 在Java 21中,引入了虛擬線程(Virtual Threads)來簡化和增強併發性,這使得在Java中編程併發程式更容易、更高效。 虛擬線程,也稱為“用戶模式線程(user-mode threads)”或“纖程(fibers)”。該功能旨在簡化併發編程並提供更好的可擴展性。虛擬線程是輕量級的,這 ...
  • 折線圖是一種用於可視化數據變化趨勢的圖表,它可以用於表示任何數值隨著時間或類別的變化。 折線圖由折線段和折線交點組成,折線段表示數值隨時間或類別的變化趨勢,折線交點表示數據的轉折點。 折線圖的方向表示數據的變化方向,即正變化還是負變化,折線的斜率表示數據的變化程度。 1. 主要元素 折線圖主要由以下 ...
  • 1、概述 GEBCO(General Bathymetric Chart of the Oceans)全球 DEM數據集(Geo-Engineering Digital Savage)是基於“全球地球系統計劃”(Global Earth System Project)的最新數據集。 GEBCO 數據 ...
  • Question Description 使用JAVA語言的若依框架的時候,發現只要使用了startPage()函數, 並不需要前端傳遞分頁的數據,也不需要註解,就能完成分頁功能。預判他應該是使用類似攔截器的機制,但還是感覺很神奇,感覺知道個大概不過癮,還是要更細緻的瞭解才能滿足,就想研究一下並記錄 ...
  • 歡迎訪問我的GitHub 這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos 本篇概覽 本文是《Strimzi Kafka Bridge(橋接)實戰之》系列的第二篇,咱們直奔bridge的重點:常用介面,用實際操作體驗如何用brid ...
  • 問題: 當直接使用文件路徑載入8位灰度PNG圖片為Bitmap時,Bitmap的格式將會是Format32bppArgb,而不是Format8bppIndexed,這對一些判斷會有影響,所以需要手動解析PNG的數據來構造Bitmap 步驟 1. 判斷文件格式 若對PNG文件格式不是很瞭解,閱讀本文前 ...
一周排行
    -Advertisement-
    Play Games
  • 通過WPF的按鈕、文本輸入框實現了一個簡單的SpinBox數字輸入用戶組件並可以通過數據綁定數值和步長。本文中介紹了通過Xaml代碼實現自定義組件的佈局,依賴屬性的定義和使用等知識點。 ...
  • 以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
  • 一:背景 1. 講故事 前些天有位朋友找到我,說他的程式每次關閉時就會自動崩潰,一直找不到原因讓我幫忙看一下怎麼回事,這位朋友應該是第二次找我了,分析了下 dump 還是挺經典的,拿出來給大家分享一下吧。 二:WinDbg 分析 1. 為什麼會崩潰 找崩潰原因比較簡單,用 !analyze -v 命 ...
  • 在一些報表模塊中,需要我們根據用戶操作的名稱,來動態根據人員姓名,更新報表的簽名圖片,也就是電子手寫簽名效果,本篇隨筆介紹一下使用FastReport報表動態更新人員簽名圖片。 ...
  • 最新內容優先發佈於個人博客:小虎技術分享站,隨後逐步搬運到博客園。 創作不易,如果覺得有用請在Github上為博主點亮一顆小星星吧! 博主開始學習編程於11年前,年少時還只會使用cin 和cout ,給單片機點點燈。那時候,類似async/await 和future/promise 模型的認知還不是 ...
  • 之前在阿裡雲ECS 99元/年的活動實例上搭建了一個測試用的MINIO服務,以前都是直接當基礎設施來使用的,這次準備自己學一下S3相容API相關的對象存儲開發,因此有了這個小工具。目前僅包含上傳功能,後續計劃開發一個類似圖床的對象存儲應用。 ...
  • 目錄簡介快速入門安裝 NuGet 包實體類User資料庫類DbFactory增刪改查InsertSelectUpdateDelete總結 簡介 NPoco 是 PetaPoco 的一個分支,具有一些額外的功能,截至現在 github 星數 839。NPoco 中文資料沒多少,我是被博客園群友推薦的, ...
  • 前言 前面使用 Admin.Core 的代碼生成器生成了通用代碼生成器的基礎模塊 分組,模板,項目,項目模型,項目欄位的基礎功能,本篇繼續完善,實現最核心的模板生成功能,並提供生成預覽及代碼文件壓縮下載 準備 首先清楚幾個模塊的關係,如何使用,簡單畫一個流程圖 前面完成了基礎的模板組,模板管理,項目 ...
  • 假設需要實現一個圖標和文本結合的按鈕 ,普通做法是 直接重寫該按鈕的模板; 如果想作為通用的呢? 兩種做法: 附加屬性 自定義控制項 推薦使用附加屬性的形式 第一種:附加屬性 創建Button的附加屬性 ButtonExtensions 1 public static class ButtonExte ...
  • 在C#中,委托是一種引用類型的數據類型,允許我們封裝方法的引用。通過使用委托,我們可以將方法作為參數傳遞給其他方法,或者將多個方法組合在一起,從而實現更靈活的編程模式。委托類似於函數指針,但提供了類型安全和垃圾回收等現代語言特性。 基本概念 定義委托 定義委托需要指定它所代表的方法的原型,包括返回類 ...