如何為你的 C++ 執行檔添加一個獨特的 Icon
何為你的 C++ 執行檔添加一個獨特的 Icon

想要將你精心撰寫的程式給別人使用
但總覺得好像少了什麼
那試試看添加你專屬的 Icon 上去吧!
Icon
要製作程式的 Icon 前,要先準備一張你想要當作 Icon 的圖片,建議大小為正方形的,格式可以是 PNG、BMP、JPEG 等常見的類型。
ICO
有了圖片之後,我們要將該圖片轉換成 Windows 儲存 Icon 專用的類型,也就是 ICO 格式。以下列了許多種轉換的方法,可以供各位選擇使用,如果只是少數幾張,最方便的方法就是使用 Online Converter,大量的話建議使用 Programming Language。
- Online Converter
- Imagemagick
- ImageToIcon
- Programming Language
- FFmpeg
Online Converter
網路上有眾多 Icon Converter,這邊用 https://www.icoconverter.com 舉例:
- 選擇要轉成 ICO 檔案的圖片。

選擇圖片檔案
- 由於 ICO 檔案可以包含多種不同大小的圖片,因此可以選擇你要產生哪些大小的圖片。

選擇要產生的圖片大小
- 選擇每個像素要用多少位元來表示,如果有透明的話,要選擇 32 bits。

選擇 Icon 的位元深度
- 之後按下 Convert 的按鈕就會轉換好並自動下載了

開始轉換
Imagemagick
Imagemagick 是一款可以對圖片編輯、轉換格式和檢視圖片的軟體,我們可以到 Imagemagick - Windows Download 來下載後並安裝,就可以透過 terminal 來使用,輸入下列指令來轉換。
magick <Input Image> -define icon:auto-resize=<Image Sizes> -background transparent <Output Image>
# Example
magick image.png -define icon:auto-resize=256,128,48,32,16 -background transparent icon.ico
我們輸入的圖片為 <Input Image>
也就是範例的 image.png,輸出的 ICO 檔案為 <Output Image>
為範例中的 icon.ico。
圖片大小我們可以自己設定,如範例中的 256x256, 128x128, 48x48, 32x32, 16x16,並設定背景為透明的。
ImageToIcon
如果想要下載程式轉換的話,可以使用人家製作好的工具,來幫助你轉換圖片成 ICO 格式,例如 Github - ImageToIcon。
Programming Language
轉換大量檔案的話,可以使用撰寫程式語言來轉換,這邊提供幾個範例。
Python
在 Python 中,我們可以使用 Pillow 來製作 ICO 檔案。根據 Pillow Doc,預設的圖片輸出大小為 16x16、24x24、32x32、48x48、64x64、128x128、256x256。
from PIL import Image
filename = 'image.png'
img = Image.open(filename)
img.save('logo.ico')
如果要指定輸出的檔案大小,可以在儲存時一併指定,超過 256x256 的大小會被忽略。
from PIL import Image
filename = 'image.png'
img = Image.open(filename)
icon_sizes = [(32, 32), (64,64), (256,256)]
img.save('logo.ico', sizes=icon_sizes)
Rust
在 Rust 中,我們可以使用 DOCS.RS - ico
// 建立新的 ICO 檔案集合
let mut icon_dir = ico::IconDir::new(ico::ResourceType::Icon);
// 讀取 PNG 檔案並加入倒 ICO 集合中
let file = std::fs::File::open("image.png").expect("Open File Error!");
let image = ico::IconImage::read_png(file).expect("Read PNG File Error!");
icon_dir.add_entry(ico::IconDirEntry::encode(&image).unwrap());
// 輸出 ICO 檔案
let file = std::fs::File::create("favicon.ico").expect("Create ICO File Error!");
icon_dir.write(file).expect("Write ICO File Error!");
FFmpeg
如果電腦有安裝 FFmpeg 的也可以使用 FFmpeg 來轉換圖片成 ICO 檔案。
ffmpeg -i <Input Image> -vf scale=<Image Size> <Output Image>
# Example
ffmpeg -i image.png -vf scale=256:256 img.ico
加入 ICO 檔案到程式
有了 ICO 檔案,我們就可以將檔案加入到我們的 C++ 程式中了,這邊列出常用的程式的教學。
Visual Studio
- 在專案總管找到 Resource Files
Resource Files
- 點擊右鍵,選擇 ADD,接著選擇 Resource
點擊右鍵
- 點擊 Import
點擊 Import
- 切換種類至 ICO 檔案
切換種類至 ICO 檔案
- 接著重新編譯專案就可以看到 Icon 顯示出來了!
MinGW
首先先建立一個 RC 檔案,例如:
my.rc
,裡面放進下面這行文字,“path/to/my.ico” 請更換成 ICO 檔案的路徑,建議與 RC 檔案放在一起,這樣只要設定成 ICO 檔案的名稱就好了。id ICON "path/to/my.ico"
範例:
id ICON "image.ico"
接著使用 windres 來處理 Windows 的資源,並產生 RES 檔案。
windres <RC FILE> -O coff -o <RES FILE>
範例:
windres my.rc -O coff -o my.res
編譯的時候一同帶上 RES 檔案,這樣就大功告成啦。
g++ <SOURCE FILE> my.res -o <EXE FILE>
範例:
g++ test.cpp my.res -o test.exe
Cmake
與 MinGW 相同,先建立一個 RC 檔案,例如:my.rc
,裡面放進下面這行文字,“path/to/my.ico” 請更換成 ICO 檔案的路徑,建議與 RC 檔案放在一起,這樣只要設定成 ICO 檔案的名稱就好了。
id ICON "path/to/my.ico"
範例:
id ICON "image.ico"
在 CMakeLists.txt 裡面加上下方這段,啟用 RC language,並加入到執行檔的來源檔案。my.rc 則是放到專案路徑下的 icon 資料夾,PROJECT_SOURCES 則是原本專案的 code。
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
enable_language("RC")
set(WIN32_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/icon/my.rc)
endif()
add_executable(MyApp
${PROJECT_SOURCES}
${WIN32_RESOURCES}
)
Reference
- https://www.icoconverter.com/
- https://stackoverflow.com/questions/3185677/converting-gifs-pngs-and-jpgs-to-ico-files-using-imagemagick
- https://github.com/Si13n7/ImageToIcon
- https://stackoverflow.com/questions/45507/is-there-a-python-library-for-generating-ico-files
- https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#ico
- https://docs.rs/ico/latest/ico/
- https://www.imagemagick.org/script/convert.php
- https://superuser.com/questions/227736/how-do-i-convert-a-png-into-a-ico
- https://learn.microsoft.com/en-us/answers/questions/1338152/how-to-put-an-icon-in-the-c-winforms-executable?cid=kerryherger
- https://stackoverflow.com/questions/708238/how-do-i-add-an-icon-to-a-mingw-gcc-compiled-executable
- https://stackoverflow.com/questions/68517552/how-to-add-icon-to-a-qt-application-on-windows-using-a-rc-file-on-a-cmake-proje
如果你覺得這篇文章有用 可以考慮贊助飲料給大貓咪