0

RGB888 画像データを TIFF 画像に変換しようとしています。しかし、コードは不適切なイメージを生成します。テキストファイルからRGBデータを読み取っています。出力画像は次のとおりです

不適切な画像を添付 黒い領域はそこにあるべきではありません。コードが低い RGB 値をゼロにしているようです。アルファ チャネルなしで tiff イメージを作成しています。問題を理解するのを手伝ってください。

TIFF *out= TIFFOpen("new.tif", "w");

int sampleperpixel = 3;
uint32 width=320;
uint32 height=240;
unsigned char image[width*height*sampleperpixel];
int pixval;
int count=0;


FILE *ptr=fopen("data.txt","r");
if (ptr!=NULL)
    {
      while(count<width*height)
        {fscanf(ptr,"%d",&pixval);            
        *(image+count)=(unsigned char)pixval;
        count++;}
    }
printf("%d\n",count);

TIFFSetField(out, TIFFTAG_IMAGEWIDTH, width);  // set the width of the image
TIFFSetField(out, TIFFTAG_IMAGELENGTH, height);    // set the height of the image
TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, sampleperpixel);   // set number of channels per pixel
TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8);    // set the size of the channels
TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);    // set the origin of the image.
//   Some other essential fields to set that you do not have to understand for now.
TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB);

tsize_t linebytes = sampleperpixel * width;
unsigned char *buf = NULL; 
//if (TIFFScanlineSize(out)<linebytes)
//  buf =(unsigned char *)_TIFFmalloc(linebytes);
//else
    buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out));




TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(out, width*sampleperpixel));

uint32 row ;
//Now writing image to the file one strip at a time
for (row = 0; row < height; row++)
{
    //memcpy(buf, &image[(height-row-1)*linebytes], linebytes);    // check the index here, and figure out why not using h*linebytes
    memcpy(buf, &image[(row)*linebytes], linebytes);        
if (TIFFWriteScanline(out, buf, row, 0) < 0)
    break;
}


TIFFClose(out);

if (buf)
 _TIFFfree(buf);
4

1 に答える 1