画像ファイルから輝度値を読み込みCSVファイルに書き出すプログラムを作成しています。
画像は幅2048pixel×高さ32768pixelのRAW画像ファイルです。
サイズは134,217,768 バイトでヘッダーが40バイトあります。
画像は白黒10ビットで取得し2バイトに格納されています。
なので例えばバイナリで「C0 01」だと「01 C0」に入れ替えて「1C0」にして
2^10/2^16を掛けて10進数に変換すれば「7」となり輝度値が求まります。
そこで以下のようなプログラムを考えたのですが、
freadで2バイト取得して処理して書き込みしてをファイル終わりまで
繰り返せばいいと思ったのですが上手くいきません。whileループでエラーが・・・
詳しい方、どうか教えて下さい。
#include <stdio.h>
#include<math.h>
#include<stdlib.h>
int main(void)
{
FILE *fp, *OUT;
unsigned char header[40];
unsigned char buf[64];
unsigned char buf5[64];
int i,j,c;
char st2[]=".raw";
char st1[64];
char str1[64];
printf("バイナリファイル名を入力してください\n");
printf("例(neko.raw→neko)\n");
gets(st1);
printf("よみこんだんよ\n");
sprintf_s(str1,"%s%s",st1,st2);
fp = fopen( str1, "rb" ); //RAWファイル読み込み
if( fp == NULL ){
printf( "%sファイルがないです", st1 );
getchar();
return -1;
}
fread(header,1,40,fp); //ヘッダー部は切り捨て
c=0;
while(fread( buf5, 1, 2, fp )==2){ //2バイトずつバイナリを読み込み
buf[0]=(buf5[1]*256+buf5[0])*1024/65536; //入替&計算
OUT=fopen("kidochi.csv","w");
fprintf(OUT,"%02d,",buf[0]); //CSVファイルに輝度値を書き込み
c=c+1;
if(c%2048==0){
fputc('\n',OUT); //幅2048pixで改行
}
}
fclose( fp );
fclose( OUT );
getchar();
return 0;
}