SDL_image のインストール(ソースコードを用いたインストール)(Build Tools for Visual Studio を使用),SDL_image のプログラム例(Windows 上)

SDL_image は, BMP, JPEG, PNG, PNM などの画像ファイル処理のライブラリである.Windows上でのインストール手順は以下の通り:管理者権限でコマンドプロンプトを実行し,GitHubからソースコードをクローン.cmakeを使用してビルド設定を生成し,ソースコードをビルドしてインストール.その後,システム環境変数(SDL_IMAGE_ROOT,Path)を設定し,必要な実行ファイルをコピーする.最後に,テスト実行を行って機能を確認する.ライブラリの使用例として,画像ファイルを読み込み,各ピクセルのRGB値を出力するサンプルコードも示している.このライブラリにより,様々な形式の画像ファイルを簡単に扱うことが可能になる.

目次

  1. 前準備
  2. SDL_image のインストール(Build Tools for Visual Studio を利用 )

前準備

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 を利用 )

  1. Windows で,管理者権限コマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)。.

    コマンドプロンプトを管理者として実行: 別ページ »で説明

  2. SDL_image のインストールディレクトリを削除する
    C:
    cd /d c:%HOMEPATH%
    rmdir /s /q SDL_image
    
  3. SDL_image のソースコードをダウンロード
    cd /d c:%HOMEPATH%
    git clone --recursive https://github.com/libsdl-org/SDL_image
    
  4. 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"
    
  5. cmake の実行結果の確認

    * 下の通りになるとは限らない.エラーメッセージが出るなど場合は,前で cmake を実行したときの設定を変えてやり直す

  6. ソースコードからビルドし、インストールする
    cmake --build . --config RELEASE
    cmake --build . --config RELEASE --target INSTALL
    
  7. 実行結果の確認
  8. Windowsシステム環境変数 SDL_IMAGE_ROOT に,C:\sdl を設定

    Windows で,管理者権限コマンドプロンプトを起動(手順:Windowsキーまたはスタートメニュー > cmd と入力 > 右クリック > 「管理者として実行」)。

    次のコマンドを実行

    powershell -command "[System.Environment]::SetEnvironmentVariable(\"SDL_IMAGE_ROOT\", \"C:\sdl\", \"Machine\")"
    
  9. 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\")"
    
  10. .exe ファイルのコピー
    cd %HOMEPATH%
    cd SDL_image\build\Release
    copy *.exe C:\sdl\bin
    
  11. テスト実行

    SDL_image の機能を使い JPEG ファイルなどを表示するプログラムを起動してみる. JPEG ファイルは何でも良いが,ここでは,lena_std.jpg を使ってみる.

    c:\sdl\bin\showimage.exe lena_std.jpg
    

SDL_image のプログラム例

ソースコード

画像ファイルはヘッダが付いていたり,しばしば圧縮されている.画像ファイルの種類もいろいろある. SDL_image を使うと,こうしたことを気にしなくて済む

次の仮定を置く

/* 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でビルド,環境変数設定後にテスト実行.