トップページインストール,使い方Windows の種々のソフトウェア(インストール,使い方)SDL_image のインストール(ソースコードを使用),SDL_image のプログラム例(Windows 上)

SDL_image のインストール(ソースコードを使用),SDL_image のプログラム例(Windows 上)

SDL_image は, BMP, JPEG, PNG, PNM などの画像ファイルを扱う機能を持ったライブラリ.

目次

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

前準備

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)もしくは Visual Studio 2022 のインストール(Windows 上)

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)もしくはVisual Studio 2022 を,前もってインストールしておく.NVIDIA CUDA の nvcc を機能させるため.

Git のインストール(Windows 上)

Git のページ https://git-scm.com/ からダウンロードしてインストール:

cmake のインストール(Windows 上)

cmake のダウンロードページ: https://cmake.org/download/

Python 64 ビット版のインストール,pip と setuptools の更新(Windows 上)

Windows での Python 3.10 のインストール,pip と setuptools の更新: 別ページで説明している.

Python の公式ページ: http://www.python.org/

SDL2 のインストール

Windows での SDL2 のインストール: 別ページで説明している.

SDL_image のインストール(Build Tools for Visual Studio を利用 )

  1. Windows で,コマンドプロンプト管理者として実行する.
  2. SDL_image のインストールディレクトリを削除する
    C:
    cd %HOMEPATH%
    rmdir /s /q SDL_image
    

    [image]
  3. SDL_image のソースコードをダウンロード
    cd %HOMEPATH%
    git clone --recursive https://github.com/libsdl-org/SDL_image
    

    [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 %HOMEPATH%
    cd SDL_image
    rmdir /s /q build
    mkdir build
    cd build
    del CMakeCache.txt
    cmake .. -G "Visual Studio 17 2022" -T host=x64 ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DSDL2_MAIN_LIBRARY="C:/sdl/lib/SDL2main.lib" ^
        -DCMAKE_INSTALL_PREFIX="c:/sdl"
    

    [image]
  5. cmake の実行結果の確認

    ※ 下図のとおりになるとは限らない.自動設定がうまくいっていない場合は、1つ上の「cmake の実行」のところを、設定を変えてやり直す

    [image]
  6. ソースコードからビルドし、インストールする
    cmake --build . --config RELEASE
    cmake --build . --config RELEASE --target INSTALL
    
  7. 実行結果の確認

    [image]
  8. システム環境変数 SDL_IMAGE_ROOT に,C:\sdl を設定

    管理者として実行した コマンドプロンプトで,次のコマンドを実行する.

    call powershell -command "[System.Environment]::SetEnvironmentVariable(\"SDL_IMAGE_ROOT\", \"C:\sdl\", \"Machine\")"
    

    [image]
  9. システム環境変数 Pathに,C:\sdl\bin追加することにより,パスを通す

    管理者として実行した コマンドプロンプトで,次のコマンドを実行する.

    call 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
    

    [image]

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

[image]

実行結果の例

テストデータ: 24.bmp

実行結果の例

[image]

[image]