画像処理入門 >
TIFFファイルの読み書き >
48bit TIFF画像読み込み
48bit TIFF画像読み込み
48bit TIFF画像読み込み
LibTIFFを使用して、48bit TIFF画像を読み込むプログラムです。
サンプルプログラム
#include
#include
#include
#include "./include/tiffio.h"
#pragma comment (lib, "lib/libtiff.lib")
typedef struct{
TIFF *info;
void *data;
uint32 tiffsize;
int width;
int height;
uint16 samplesperpixel;
uint16 bitspersample;
uint16 photometric;
uint16 fillorder;
uint16 compression;
uint16 orientation;
uint16 resunit;
uint16 planarconfig;
} TIFF_DATA;
bool tiffRead48(TIFF_DATA *tiffData, char *fname){
int i, j;
uint16 *buf, *line;
TIFF *tiff;
FILE *fp;
tiff = TIFFOpen(fname, "r");
if(tiff == NULL){
printf("ファイルを開けません\n");
return false;
}
printf("ng\n");
// Tagを読み込む
TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &tiffData->width);
TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &tiffData->height);
TIFFGetField(tiff, TIFFTAG_BITSPERSAMPLE, &tiffData->bitspersample);
TIFFGetField(tiff, TIFFTAG_SAMPLESPERPIXEL, &tiffData->samplesperpixel);
TIFFGetField(tiff, TIFFTAG_COMPRESSION, &tiffData->compression);
TIFFGetField(tiff, TIFFTAG_PHOTOMETRIC, &tiffData->photometric);
TIFFGetField(tiff, TIFFTAG_FILLORDER, &tiffData->fillorder);
TIFFGetField(tiff, TIFFTAG_PLANARCONFIG, &tiffData->planarconfig);
TIFFGetField(tiff, TIFFTAG_ORIENTATION, &tiffData->orientation);
TIFFGetField(tiff, TIFFTAG_RESOLUTIONUNIT, &tiffData->resunit);
// 画像の領域確保
tiffData->tiffsize = tiffData->width * tiffData->height * sizeof( uint16 ) * 3;
tiffData->data = ( uint16 * )malloc( tiffData->tiffsize );
buf = (uint16 *)tiffData->data;
// 画像1ライン分の領域確保
line = ( uint16 * )_TIFFmalloc( TIFFScanlineSize( tiff ) );
// 画像情報を読み込む
for (i = 0; i < tiffData->height; ++i){
// 1ラインずつ読み込む
if ( TIFFReadScanline( tiff, line, i, 0 ) < 0 ){
printf("読み込めません。\n");
// 解放処理
_TIFFfree( line );
TIFFClose( tiff );
free(buf);
return false;
}
for (j = 0; j < tiffData->width; ++j){
buf[i * tiffData->width * 3 + j * 3] = line[j * 3];
buf[i * tiffData->width * 3 + j * 3 + 1] = line[j * 3 + 1];
buf[i * tiffData->width * 3 + j * 3 + 2] = line[j * 3 + 2];
}
}
// 解放処理
_TIFFfree( line );
TIFFClose( tiff );
return true;
}