SDL_image のインストール(ソースコードを用いたインストール)(Build Tools for Visual Studio を使用),SDL_image のプログラム例(Windows 上)
SDL_image は, BMP, JPEG, PNG, PNM などの画像ファイル処理のライブラリである.Windows上でのインストール手順は以下の通り:管理者権限でコマンドプロンプトを実行し,GitHubからソースコードをクローン.cmakeを使用してビルド設定を生成し,ソースコードをビルドしてインストール.その後,システム環境変数(SDL_IMAGE_ROOT,Path)を設定し,必要な実行ファイルをコピーする.最後に,テスト実行を行って機能を確認する.ライブラリの使用例として,画像ファイルを読み込み,各ピクセルのRGB値を出力するサンプルコードも示している.このライブラリにより,様々な形式の画像ファイルを簡単に扱うことが可能になる.
【目次】
前準備
Visual Studio 2022 Build Toolsとランタイムのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。
REM Visual Studio 2022 Build Toolsとランタイムのインストール
winget install --scope machine Microsoft.VisualStudio.2022.BuildTools Microsoft.VCRedist.2015+.x64
set VS_INSTALLER="C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe"
set VS_PATH="C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools"
REM C++開発ワークロードのインストール
%VS_INSTALLER% modify --installPath %VS_PATH% ^
--add Microsoft.VisualStudio.Workload.VCTools ^
--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ^
--add Microsoft.VisualStudio.Component.Windows11SDK.22621 ^
--includeRecommended --quiet --norestart
Python 3.12 のインストール
インストール済みの場合は実行不要。
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要である。
REM Python をシステム領域にインストール
winget install --scope machine --id Python.Python.3.12 -e --silent
REM Python のパス設定
set "PYTHON_PATH=C:\Program Files\Python312"
set "PYTHON_SCRIPTS_PATH=C:\Program Files\Python312\Scripts"
echo "%PATH%" | find /i "%PYTHON_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_PATH%" /M >nul
echo "%PATH%" | find /i "%PYTHON_SCRIPTS_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%PYTHON_SCRIPTS_PATH%" /M >nul
【関連する外部ページ】
Python の公式ページ: https://www.python.org/
AI エディタ Windsurf のインストール
Pythonプログラムの編集・実行には、AI エディタの利用を推奨する。ここでは,Windsurfのインストールを説明する。
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行して、Windsurfをシステム全体にインストールする。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
winget install --scope machine Codeium.Windsurf -e --silent
【関連する外部ページ】
Windsurf の公式ページ: https://windsurf.com/
Gitのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
REM Git をシステム領域にインストール
winget install --scope machine --id Git.Git -e --silent
REM Git のパス設定
set "GIT_PATH=C:\Program Files\Git\cmd"
if exist "%GIT_PATH%" (
echo "%PATH%" | find /i "%GIT_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%GIT_PATH%" /M >nul
)
CMakeのインストール
管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)し、以下を実行する。管理者権限は、wingetの--scope machineオプションでシステム全体にソフトウェアをインストールするために必要となる。
REM CMake をシステム領域にインストール
winget install --scope machine --id Kitware.CMake -e --silent
REM CMake のパス設定
set "GMAKE_PATH=C:\Program Files\CMake\bin"
if exist "%GMAKE_PATH%" (
echo "%PATH%" | find /i "%GMAKE_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%GMAKE_PATH%" /M >nul
)
SDL2 のインストール
Windows での SDL2 のインストール: 別ページ »で説明
SDL_image のインストール(Build Tools for Visual Studio を利用 )
- Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。.コマンドプロンプトを管理者として実行: 別ページ »で説明
- SDL_image のインストールディレクトリを削除する
C: cd /d c:%HOMEPATH% rmdir /s /q SDL_image
- SDL_image のソースコードをダウンロード
cd /d c:%HOMEPATH% git clone --recursive https://github.com/libsdl-org/SDL_image
- cmake の実行
cmake でのオプションについて
cmake のオプションの 「Visual Studio 17 2022」のところは, 使用する Visual Studio のバージョンにあわせること. Visual Studio 2022 のときは,「Visual Studio 17 2022」. Visual Studio 2019 のときは,「Visual Studio 16 2019」
cmake の実行手順例は次の通り
cd /d c:%HOMEPATH% cd SDL_image rmdir /s /q build mkdir build cd build del CMakeCache.txt rmdir /s /q CMakeFiles\ cmake .. -G "Visual Studio 17 2022" -A x64 -T host=x64 ^ -DCMAKE_BUILD_TYPE=Release ^ -DSDL2_MAIN_LIBRARY="C:/sdl/lib/SDL2main.lib" ^ -DCMAKE_INSTALL_PREFIX="c:/sdl"
- cmake の実行結果の確認
* 下の通りになるとは限らない.エラーメッセージが出るなど場合は,前で cmake を実行したときの設定を変えてやり直す.
- ソースコードからビルドし、インストールする
- 実行結果の確認
- Windows の システム環境変数 SDL_IMAGE_ROOT に,C:\sdl を設定
Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。次のコマンドを実行
powershell -command "[System.Environment]::SetEnvironmentVariable(\"SDL_IMAGE_ROOT\", \"C:\sdl\", \"Machine\")"
- Windows の システム環境変数 Pathに,C:\sdl\bin を追加することにより,パスを通す.
Windows で,管理者権限でコマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー >
cmd
と入力 > 右クリック > 「管理者として実行」)。次のコマンドを実行
powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";C:\sdl\bin\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
- .exe ファイルのコピー
cd %HOMEPATH% cd SDL_image\build\Release copy *.exe C:\sdl\bin
- テスト実行
SDL_image の機能を使い JPEG ファイルなどを表示するプログラムを起動してみる. JPEG ファイルは何でも良いが,ここでは,lena_std.jpg を使ってみる.
c:\sdl\bin\showimage.exe lena_std.jpg
SDL_image のプログラム例
ソースコード
画像ファイルはヘッダが付いていたり,しばしば圧縮されている.画像ファイルの種類もいろいろある. SDL_image を使うと,こうしたことを気にしなくて済む.
次の仮定を置く
- RGBのカラー画像
- 1画素の R, G, B 成分は1バイトであること.
- 画像データは隙間無くならんでいること.
- R, G, B の順に並んでいることを仮定している.
/* SDL を用いた画像読み込みファイルプログラム */ #include<stdlib.h> #include<stdio.h> #include<string.h> #include "SDL.h" #include "SDL_image.h" int main(int argc, char *argv[]) { SDL_Surface *image; int i, j; int r, g, b; /* Check command line usage */ if ( ! argv[1] ) { fprintf(stderr, "Usage: %s <image_file>\n", argv[0]); return(1); } /* Open the image file */ image = IMG_Load(argv[1]); if ( image == NULL ) { fprintf(stderr, "Couldn't load %s: %s\n", argv[1], SDL_GetError()); } for ( i = 0; i < image->h; i++ ) { for ( j = 0; j < image->w; j++ ) { // 1画素の R, G, B 成分は1バイトであること.画像データは隙間無くならんでいること.R, G, B の順に並んでいることを仮定している. unsigned char* p = (unsigned char*)image->pixels; int pixel_at = (i * (image->w) + j ) * image->format->BytesPerPixel; r = p[pixel_at]; g = p[pixel_at + 1]; b = p[pixel_at + 2]; fprintf(stderr, "%d, %d = (%d, %d, %d)\n", i, j, r, g, b); } } fprintf( stderr, "image->format->BytesPerPixel = %d", image->format->BytesPerPixel ); fprintf( stderr, "image->w = %d", image->w ); fprintf( stderr, "image->h = %d", image->h ); /* We're done! */ SDL_Quit(); return(0); }
ビルド手順
view.cpp のところは実際のファイル名に読み替えてください.
g++ -I/usr/local/include/SDL -o a.exe view.cpp -lSDL_image -lSDL -lpthread -lm

実行結果の例
テストデータ: 24.bmp
実行結果の例


【まとめ】 SDL_imageをクローン,cmakeでビルド,環境変数設定後にテスト実行.