BMPファイルの輝度を配列で表す
はじめての投稿です。よろしくお願いします。
ただいまC++でBMPファイル処理の勉強をしています。わからないところがBMPファイル(480×640)を読み込みその画像の輝度を配列(480×640)でテキストファイルに書き込みたいのですが、途中から配列がずれてしまいます。
各ピクセルからRGB値を読み込み輝度yを求めてるのですが、最初にBMPファイルのヘッダーを読み込んでしまってるんでしょうか?どなたかご教授お願いします。プラットフォームはWin32です。
以下にソースコードを載せます。
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#pragma warning( disable : 4996 )
#pragma warning( disable : 4244 )
#pragma warning( disable : 4700 )
int main(void){
BITMAPFILEHEADER BmpHead = { 0 };
int R, G, B, y;
FILE *fpi, *fpy;
/* y値出力のオープン */
if((fpy=fopen("test.txt", "a")) == NULL){
fprintf(stderr, "output file open error\n");
exit(1);
}
/*画像の読込*/
if((fpi = fopen("filename.bmp","rb")) != NULL ){
fread( &BmpHead, sizeof(BmpHead), 1, fpi );
fseek( fpi, BmpHead.bfOffBits, SEEK_SET );
int h,l;
static int matrixy[480][640]; //画像のサイズ480×640
for(h=0;h<480;h++){
for(l=0;l<640;l++){
B = fgetc(fpi);
G = fgetc(fpi);
R = fgetc(fpi);
y=0.298912*R+0.586611*G+0.114478*B; /*輝度の算出*/
fprintf(fpy,"%f,",y);
}
fprintf(fpy,"\n");
}
}
fclose(fpy);
fclose(fpi);
}
よろしくお願いします。
お礼
前回に引き続きご回答ありがとうございます。 なるほどこのようなものがあったのですね。 行列の形のままwrite,readできるのは非常にありがたいです。 ありがとうございました!