目錄

廣告 AD

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

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

想要將你精心撰寫的程式給別人使用

但總覺得好像少了什麼

那試試看添加你專屬的 Icon 上去吧!

廣告 AD

要製作程式的 Icon 前,要先準備一張你想要當作 Icon 的圖片,建議大小為正方形的,格式可以是 PNG、BMP、JPEG 等常見的類型。


有了圖片之後,我們要將該圖片轉換成 Windows 儲存 Icon 專用的類型,也就是 ICO 格式。以下列了許多種轉換的方法,可以供各位選擇使用,如果只是少數幾張,最方便的方法就是使用 Online Converter,大量的話建議使用 Programming Language。

  1. Online Converter
  2. Imagemagick
  3. ImageToIcon
  4. Programming Language
  5. FFmpeg

網路上有眾多 Icon Converter,這邊用 https://www.icoconverter.com 舉例:


  1. 選擇要轉成 ICO 檔案的圖片。

選擇圖片檔案

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

選擇要產生的圖片大小

  1. 選擇每個像素要用多少位元來表示,如果有透明的話,要選擇 32 bits。

選擇 Icon 的位元深度

  1. 之後按下 Convert 的按鈕就會轉換好並自動下載了

開始轉換


Imagemagick 是一款可以對圖片編輯、轉換格式和檢視圖片的軟體,我們可以到 Imagemagick - Windows Download 來下載後並安裝,就可以透過 terminal 來使用,輸入下列指令來轉換。

shell

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,並設定背景為透明的。


如果想要下載程式轉換的話,可以使用人家製作好的工具,來幫助你轉換圖片成 ICO 格式,例如 Github - ImageToIcon


轉換大量檔案的話,可以使用撰寫程式語言來轉換,這邊提供幾個範例。


在 Python 中,我們可以使用 Pillow 來製作 ICO 檔案。根據 Pillow Doc,預設的圖片輸出大小為 16x16、24x24、32x32、48x48、64x64、128x128、256x256。

python

from PIL import Image

filename = 'image.png'
img = Image.open(filename)
img.save('logo.ico')

如果要指定輸出的檔案大小,可以在儲存時一併指定,超過 256x256 的大小會被忽略。

python

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 中,我們可以使用 DOCS.RS - ico

rust

// 建立新的 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 來轉換圖片成 ICO 檔案。

shell

ffmpeg -i <Input Image> -vf scale=<Image Size> <Output Image>

# Example
ffmpeg -i image.png -vf scale=256:256 img.ico

有了 ICO 檔案,我們就可以將檔案加入到我們的 C++ 程式中了,這邊列出常用的程式的教學。


  1. 在專案總管找到 Resource Files

    Resource Files


  1. 點擊右鍵,選擇 ADD,接著選擇 Resource

    點擊右鍵


  1. 點擊 Import

    點擊 Import


  1. 切換種類至 ICO 檔案

    切換種類至 ICO 檔案


  1. 接著重新編譯專案就可以看到 Icon 顯示出來了!

  1. 首先先建立一個 RC 檔案,例如:my.rc,裡面放進下面這行文字,“path/to/my.ico” 請更換成 ICO 檔案的路徑,建議與 RC 檔案放在一起,這樣只要設定成 ICO 檔案的名稱就好了。

    text

    id ICON "path/to/my.ico"

    範例:

    text

    id ICON "image.ico"

  1. 接著使用 windres 來處理 Windows 的資源,並產生 RES 檔案。

    shell

    windres <RC FILE> -O coff -o <RES FILE>

    範例:

    shell

    windres my.rc -O coff -o my.res

  1. 編譯的時候一同帶上 RES 檔案,這樣就大功告成啦。

    shell

    g++ <SOURCE FILE> my.res -o <EXE FILE>

    範例:

    shell

    g++ test.cpp my.res -o test.exe

與 MinGW 相同,先建立一個 RC 檔案,例如:my.rc,裡面放進下面這行文字,“path/to/my.ico” 請更換成 ICO 檔案的路徑,建議與 RC 檔案放在一起,這樣只要設定成 ICO 檔案的名稱就好了。

text

id ICON "path/to/my.ico"

範例:

text

id ICON "image.ico"

在 CMakeLists.txt 裡面加上下方這段,啟用 RC language,並加入到執行檔的來源檔案。my.rc 則是放到專案路徑下的 icon 資料夾,PROJECT_SOURCES 則是原本專案的 code。

cmake

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}
)


廣告 AD