libtiff.名前通り,TIFFを扱うためのライブラリ.Windoes用はこちら.
Complete package, except sourcesからインストール用exeを落とせるから,おとなしくインストールexeを使うと楽.
ふと気づいたんだけど,これだけ時間がかかって,画像の読み込みしか知らない・・・いったい何なんだ.
libtiffを使ったTIFF画像のロードの簡単な流れ.3->4の流れが意味不明.
- TIFF画像をオープン
画像をオープン. - タグ(TIFF画像の情報)を取得
TIFFは一つのフォーマットで色々なデータの保持の仕方をするので,そこら辺の情報を取得する. - 画像のラインを取得
画像の1ラインをバッファに格納. - 画素値を取得
バッファから1画素の画素値を取得. - TIFF画像をクローズ
閉じる.
uint16 nSample, nBits, nPlan, nPhoto, nOri, pix;
uint32 nWidth, nHeight, nRows, size, raster, i, j;
TIFF tif = TIFFOpen("charmie.tif","r"); // 画像オープン
// ここからタグ取得
TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &nWidth);
TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &nHeight);
TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nSample );
TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &nBits );
TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &nRows );
TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &nPlan );
TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &nPhoto );
TIFFGetField(tif, TIFFTAG_ORIENTATION, &nOri );
size = TIFFScanlineSize(tif);
raster = (uint32 )_TIFFmalloc(size * sizeof(unsigned long));
for(i = 0; i
{
TIFFReadScanline(tif, raster, i, 0); // ラインをバッファに格納
for(j = 0; j
{
pix = *1; // 画素値を読み込む
}
}
// 全部閉じる
_TIFFfree(raster);
TIFFClose(tif);
書いて分かるけど,全然難しいコードじゃない.何か自分にがっかり.
8bitデータであれば,TIFFReadRGBAImageで,画像データ全体を一度バッファに格納すればOKっぽい.
とりあえず疲れた.
*1:unsigned int *)(raster + j