# クラス fk_Image

画像を生成、管理するクラス [詳細]

fk_Imageに対する継承グラフ
[凡例]
fk_Imageのコラボレーション図
[凡例]

すべてのメンバ一覧

## Public メソッド
| fk_Image (int w=0, int h=0)
| コンストラクタ
| ~fk_Image ()
| デストラクタ
| fk_Image (const fk_Image &)
| コピーコンストラクタ
void | init ()
| 初期化関数
bool | readBMP (const std::string fileName)
| BMP ファイル入力関数.
bool | readBMPData (fk_ImType *buf)
| BMP バッファ入力関数.
bool | readPNG (const std::string fileName)
| PNG ファイル入力関数.
bool | readPNGData (fk_ImType *buf)
| PNG データ入力用関数.
bool | readJPG (const std::string fileName)
| JPEG ファイル入力関数.
bool | writeBMP (const std::string fileName, const bool transFlg=false)
| BMP ファイル出力関数.
bool | writePNG (const std::string fileName, const bool transFlg=true)
| PNG ファイル出力関数.
bool | writeJPG (const std::string fileName, int quality=80)
| JPEG ファイル出力関数.
void | newImage (int w, int h, bool initFlg=true)
| 画像領域生成関数
void | copyImage (const fk_Image *image)
| 画像データコピー関数1
void | copyImage (const fk_Image *image, int x, int y)
| 画像データコピー関数2
bool | subImage (const fk_Image *image, int x, int y, int w, int h)
| 画像データ部分抽出関数
int | getWidth (void) const
| 画像横幅取得関数
int | getHeight (void) const
| 画像縦幅取得関数
const fk_Dimension * | getImageSize (void)
| 画像サイズ取得関数
const fk_Dimension * | getBufferSize (void)
| 画像バッファサイズ取得関数
int | getR (int x, int y) const
| ピクセルR要素取得関数
int | getG (int x, int y) const
| ピクセルG要素取得関数
int | getB (int x, int y) const
| ピクセルB要素取得関数
int | getA (int x, int y) const
| ピクセルA要素取得関数
fk_Color | getColor (int x, int y) const
| ピクセル色要素取得関数
bool | setRGBA (int x, int y, int r, int g, int b, int a)
| ピクセル RGBA 値設定関数
bool | setRGB (int x, int y, int r, int g, int b)
| ピクセル RGB 値設定関数
bool | setR (int x, int y, int r)
| ピクセル R 値設定関数
bool | setG (int x, int y, int g)
| ピクセル G 値設定関数
bool | setB (int x, int y, int b)
| ピクセル B 値設定関数
bool | setA (int x, int y, int a)
| ピクセル A 値設定関数
bool | setColor (int x, int y, const fk_Color &col)
| ピクセル色値設定関数
void | fillColor (const fk_Color &col)
| バッファ全体初期化関数1
void | fillColor (int r, int g, int b, int a=0)
| バッファ全体初期化関数2
const fk_ImType * | getBufPointer (void) const
| 画像データ配列先頭アドレス取得関数

## 説明

画像を生成、管理するクラス

このクラスは、画像データを制御する機能を提供します。 主な利用用途はテクスチャ画像の管理ですが、 画像処理のための基本的な機能を保持しています。 画像データは RGBA 形式で保存されます。 各要素は整数値で最小値は 0、最大値は 255 です。 透過色要素は 0 が完全な不透明、255 が完全な透明を表します。 現バージョンのピクセルサイズの最大値は縦幅横幅共に 65536 までです。

実際の画像サイズと、格納するデータについての関係は getBufferSize() 関数の覚え書きを参照して下さい。

参照:
  fk_Rect, fk_Dimension, fk_Texture

## コンストラクタとデストラクタ

fk_Image::fk_Image | ( | int | w = `0`,
|  | int | h = `0` |
| ) |  |  |

コンストラクタ

引数:

  `[in]` | w | 画像の横幅
  `[in]` | h | 画像の縦幅

fk_Image::~fk_Image | ( |  | ) |

デストラクタ

fk_Image::fk_Image | ( | const fk_Image & |  | ) |

コピーコンストラクタ

## 関数

void fk_Image::init | ( |  | ) |

初期化関数

画像データを初期化します。 画像サイズも (0, 0) となります。

bool fk_Image::readBMP | ( | const std::string | fileName | ) |

BMP ファイル入力関数.

BMP (Windows Bitmap) 形式のファイルからデータを読み込みます。

引数:

  `[in]` | fileName | ファイル名

戻り値:
  入力に成功すれば true、失敗すれば false を返します。

bool fk_Image::readBMPData | ( | fk_ImType * | buf | ) |

BMP バッファ入力関数.

BMP (Windows Bitmap) 形式のバッファからデータを読み込みます。 fk_ImType 型は、OpenGL をサポートしている環境においては GLubyte、 サポートしていない環境では unsigned char 型として定義されています。

引数:

  `[in]` | buf | データバッファ

戻り値:
  入力に成功すれば true、失敗すれば false を返します。

bool fk_Image::readPNG | ( | const std::string | fileName | ) |

PNG ファイル入力関数.

PNG 形式のファイルからデータを読み込みます。

引数:

  `[in]` | fileName | ファイル名

戻り値:
  入力に成功すれば true、失敗すれば false を返します。

bool fk_Image::readPNGData | ( | fk_ImType * | buf | ) |

PNG データ入力用関数.

PNG 形式のバッファからデータを読み込みます。 fk_ImType 型は、OpenGL をサポートしている環境においては GLubyte、 サポートしていない環境では unsigned char 型として定義されています。

引数:

  `[in]` | buf | データバッファ

戻り値:
  入力に成功すれば true、失敗すれば false を返します。

bool fk_Image::readJPG | ( | const std::string | fileName | ) |

JPEG ファイル入力関数.

JPEG 形式のファイルからデータを読み込みます。

引数:

  `[in]` | fileName | ファイル名

戻り値:
  入力に成功すれば true、失敗すれば false を返します。

bool fk_Image::writeBMP | ( | const std::string | fileName,
|  | const bool | transFlg = `false` |
| ) |  |  |

BMP ファイル出力関数.

画像データを BMP (Windows Bitmap) 形式でファイルに保存します。

引数:

  `[in]` | fileName | ファイル名
  `[in]` | transFlg | true の場合、透過色要素をファイル中に書き出します。 透過色要素は本来 BMP 形式では標準でサポートされておらず、 FK によって利用する画像ファイルの独自拡張となっています。 ただし、透過色要素を埋め込んだ画像ファイルは一般のアプリケーションでも (透過色が追加されていないデータとして)読み込むことは可能です。 false の場合は、データ中の透過色要素をファイルには出力しません。

戻り値:
  書き出しに成功すれば true、失敗すれば false を返します。

bool fk_Image::writePNG | ( | const std::string | fileName,
|  | const bool | transFlg = `true` |
| ) |  |  |

PNG ファイル出力関数.

画像データを PNG 形式でファイルに保存します。

引数:

  `[in]` | fileName | ファイル名
  `[in]` | transFlg | true の場合、透過色要素をファイル中に書き出します。 false の場合は、データ中の透過色要素をファイルには出力しません。

戻り値:
  書き出しに成功すれば true、失敗すれば false を返します。

bool fk_Image::writeJPG | ( | const std::string | fileName,
|  | int | quality = `80` |
| ) |  |  |

JPEG ファイル出力関数.

画像データを JPEG 形式でファイルに保存します。 なお、JPEG 形式は透過がサポートされていないので、 画像中に透過色データを出力することはできません。

引数:

  `[in]` | fileName | ファイル名
  `[in]` | quality | 画像の品質を設定します。 品質が高いほどファイルのサイズは大きくなります。 100 が最高品質、0 が最低品質となります。範囲外の数値が入力された場合、 上下限に丸められます。

戻り値:
  書き出しに成功すれば true、失敗すれば false を返します。

void fk_Image::newImage | ( | int | w,
|  | int | h,
|  | bool | initFlg = `true` |
| ) |  |  |

画像領域生成関数

画像データを与えられたサイズに従って生成します。

引数:

  `[in]` | w | 画像の横幅
  `[in]` | h | 画像の縦幅
  `[in]` | initFlg | true の場合は、 データ全体を (0, 0, 0, 0) で初期化します。 false の場合は初期化を行いませんが、 その場合でも横幅が変更されたときは 各ピクセルの縦横関係が崩れてしまう可能性があります。

void fk_Image::copyImage | ( | const fk_Image * | image | ) |

画像データコピー関数1

画像データを別インスタンスからコピーします。 この引数形式の場合、画像サイズは元画像データと同一となります。

引数:

  `[in]` | image | 元画像データのアドレス

void fk_Image::copyImage | ( | const fk_Image * | image,
|  | int | x,
|  | int | y |
| ) |  |  |

画像データコピー関数2

画像データの部分矩形領域を、別インスタンスの画像データ内容に書き換えます。 この引数形式では、画像中の一部分となる任意領域を書き換えることが可能ですが、 コピー元となる画像全体がコピー先の中に完全に収まるような配置である必要があります。 この条件を満たさなかった場合は、データの書き換えを行いません。 配置の際の座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | image | 元画像データのアドレス
  `[in]` | x | 書き換え領域左上の x 座標
  `[in]` | y | 書き換え領域左上の y 座標

bool fk_Image::subImage | ( | const fk_Image * | image,
|  | int | x,
|  | int | y,
|  | int | w,
|  | int | h |
| ) |  |  |

画像データ部分抽出関数

別インスタンス中にある画像データの部分矩形領域をコピーします。 指定した矩形領域は全て元画像内に収まっている必要があります。 領域の座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | image | 元画像データのアドレス
  `[in]` | x | 抽出矩形領域左上の x 座標
  `[in]` | y | 抽出矩形領域左上の y 座標
  `[in]` | w | 抽出矩形領域の横幅
  `[in]` | h | 抽出矩形領域の縦幅

int fk_Image::getWidth | ( | void |  | ) | const

画像横幅取得関数

戻り値:
  横幅

int fk_Image::getHeight | ( | void |  | ) | const

画像縦幅取得関数

戻り値:
  縦幅

const fk_Dimension* fk_Image::getImageSize | ( | void |  | ) |

画像サイズ取得関数

戻り値:
  画像サイズのポインタ

const fk_Dimension* fk_Image::getBufferSize | ( | void |  | ) |

画像バッファサイズ取得関数

fk_Image では、本来の画像サイズに対し、 格納するデータ領域はより大きなものとなっています。 この関数は、実際に確保しているデータ領域の大きさを fk_Dimension 型で返すものです。

覚え書き:
  fk_Image のデータ格納がこのような仕様になっている理由は、 古い OpenGL の仕様に基づきます。 ver 2.0 以前の OpenGL では、 テクスチャ画像として与えられるデータ領域について、 横幅と縦幅は で表される 整数値でなければならないという制約がありました。 (縦幅と横幅は同一である必要はありません。) また、OpenGL の 2.0 以降をサポートしたハードウェアであっても、 以外の幅であった場合に 描画速度が著しく低下する場合があるという報告もあります。 このような理由から、 fk_Image では内部データで幅を となるように補正しています。

戻り値:
  データサイズのポインタ

int fk_Image::getR | ( | int | x,
|  | int | y |
| ) |  |  | const

ピクセルR要素取得関数

ピクセルのR(赤)要素値を取得します。 座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標

戻り値:
  ピクセルのR(赤)要素値。 指定した座標が画像内にない場合は、-1 を返します。

int fk_Image::getG | ( | int | x,
|  | int | y |
| ) |  |  | const

ピクセルG要素取得関数

ピクセルのG(緑)要素値を取得します。 座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標

戻り値:
  ピクセルのG(緑)要素値。 指定した座標が画像内にない場合は、-1 を返します。

int fk_Image::getB | ( | int | x,
|  | int | y |
| ) |  |  | const

ピクセルB要素取得関数

ピクセルのB(青)要素値を取得します。 座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標

戻り値:
  ピクセルのB(青)要素値。 指定した座標が画像内にない場合は、-1 を返します。

int fk_Image::getA | ( | int | x,
|  | int | y |
| ) |  |  | const

ピクセルA要素取得関数

ピクセルのA(透過度)要素値を取得します。 座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標

戻り値:
  ピクセルのA(透過度)要素値。 指定した座標が画像内にない場合は、-1 を返します。

fk_Color fk_Image::getColor | ( | int | x,
|  | int | y |
| ) |  |  | const

ピクセル色要素取得関数

ピクセルの色要素値を fk_Color 型で取得します。 座標系は fk_Rect の座標系に従います。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標

戻り値:
  ピクセルの色要素値。 指定した座標が画像内にない場合は、(0, 0, 0, 1) の値を返します。

bool fk_Image::setRGBA | ( | int | x,
|  | int | y,
|  | int | r,
|  | int | g,
|  | int | b,
|  | int | a |
| ) |  |  |

ピクセル RGBA 値設定関数

ピクセルの RGBA 各色要素を設定します。 座標系は fk_Rect の座標系に従います。 値が 0 から 255 の範囲内になかった場合は、 上下限それぞれに丸められます。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | r | R(赤)要素値
  `[in]` | g | G(赤)要素値
  `[in]` | b | B(赤)要素値
  `[in]` | a | A(赤)要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。 値の丸めが入った場合については、失敗とはみなしません。

bool fk_Image::setRGB | ( | int | x,
|  | int | y,
|  | int | r,
|  | int | g,
|  | int | b |
| ) |  |  |

ピクセル RGB 値設定関数

ピクセルの RGB 各色要素を設定します。 座標系は fk_Rect の座標系に従います。 値が 0 から 255 の範囲内になかった場合は、 上下限それぞれに丸められます。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | r | R(赤)要素値
  `[in]` | g | G(赤)要素値
  `[in]` | b | B(赤)要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。 値の丸めが入った場合については、失敗とはみなしません。

bool fk_Image::setR | ( | int | x,
|  | int | y,
|  | int | r |
| ) |  |  |

ピクセル R 値設定関数

ピクセルの R 色要素を設定します。 座標系は fk_Rect の座標系に従います。 値が 0 から 255 の範囲内になかった場合は、 上下限それぞれに丸められます。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | r | R(赤)要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。 値の丸めが入った場合については、失敗とはみなしません。

bool fk_Image::setG | ( | int | x,
|  | int | y,
|  | int | g |
| ) |  |  |

ピクセル G 値設定関数

ピクセルの G 色要素を設定します。 座標系は fk_Rect の座標系に従います。 値が 0 から 255 の範囲内になかった場合は、 上下限それぞれに丸められます。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | g | G(緑)要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。 値の丸めが入った場合については、失敗とはみなしません。

bool fk_Image::setB | ( | int | x,
|  | int | y,
|  | int | b |
| ) |  |  |

ピクセル B 値設定関数

ピクセルの B 色要素を設定します。 座標系は fk_Rect の座標系に従います。 値が 0 から 255 の範囲内になかった場合は、 上下限それぞれに丸められます。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | b | B(青)要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。 値の丸めが入った場合については、失敗とはみなしません。

bool fk_Image::setA | ( | int | x,
|  | int | y,
|  | int | a |
| ) |  |  |

ピクセル A 値設定関数

ピクセルの A 色要素を設定します。 座標系は fk_Rect の座標系に従います。 値が 0 から 255 の範囲内になかった場合は、 上下限それぞれに丸められます。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | a | A(透過度)要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。 値の丸めが入った場合については、失敗とはみなしません。

bool fk_Image::setColor | ( | int | x,
|  | int | y,
|  | const fk_Color & | col |
| ) |  |  |

ピクセル色値設定関数

ピクセルの色要素を fk_Color 型で設定します。 座標系は fk_Rect の座標系に従います。 座標が画像内になかった場合は、画像情報を変更しません。

引数:

  `[in]` | x | ピクセルの x 座標
  `[in]` | y | ピクセルの y 座標
  `[in]` | col | 色要素値

戻り値:
  更新に成功した場合 true を、失敗した場合 false を返します。

void fk_Image::fillColor | ( | const fk_Color & | col | ) |

バッファ全体初期化関数1

画像データ内の全てのピクセルを同一色で初期化します。 初期化の際には、実際の表示領域ではない部分についても更新を行います。 格納データについては getBufferSize() の覚え書きを参照して下さい。

引数:

  `[in]` | col | 色要素値

void fk_Image::fillColor | ( | int | r,
|  | int | g,
|  | int | b,
|  | int | a = `0` |
| ) |  |  |

バッファ全体初期化関数2

画像データ内の全てのピクセルを同一色で初期化します。 初期化の際には、実際の表示領域ではない部分についても更新を行います。 格納データについては getBufferSize() の覚え書きを参照して下さい。

引数:

  `[in]` | r | R(赤)要素値
  `[in]` | g | G(赤)要素値
  `[in]` | b | B(赤)要素値
  `[in]` | a | A(赤)要素値

const fk_ImType* fk_Image::getBufPointer | ( | void |  | ) | const

画像データ配列先頭アドレス取得関数

画像データを実際に格納しているデータ配列の先頭アドレスを参照します。

警告:
  この関数は fk_Image の内部構造に強く依存します。 内部構造は今後の更新で変更される可能性があるため、 本関数を用いた場合は後方互換性が保証できません。 また、この関数を用いて得た内部データを更新した場合、 システム全体の整合性が維持できなくなる可能性があります。 上記の2点の理由から、この関数の利用は推奨しません。

戻り値:
  画像データ配列の先頭アドレス