金子邦彦研究室インストール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 上)

サイト内の関連ページ

関連する外部ページ

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

Gitは,バージョン管理システム.ソースコードの管理や複数人での共同に役立つ.

サイト内の関連ページ

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

関連する外部ページ

Git の公式ページ: https://git-scm.com/

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

CMake はビルドツールである.

サイト内の関連ページ

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

関連する外部ページ

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

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

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

Python の公式ページ: https://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" -A x64 -T host=x64 ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DSDL2_MAIN_LIBRARY="C:/sdl/lib/SDL2main.lib" ^
        -DCMAKE_INSTALL_PREFIX="c:/sdl"
    

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

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

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

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

    Windows で,コマンドプロンプト管理者として実行

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

    次のコマンドを実行

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

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

    Windows で,コマンドプロンプト管理者として実行

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

    次のコマンドを実行

    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]