- 締切済み
raw形式からbmp形式への書き込み (画像処理)
今、raw形式のファイルを読み込んで、bmp形式への書き込みを 行うプログラムを作成しているのですがうまくいきません. 作成したプログラムの一部は以下のようになっています. ------------------rawファイルを読み込む関数の一部------------- //1次元配列の確保 tmp=us_Calloc2(width,height); //画像の読み込み fread(tmp,sizeof(unsigned short),width*height,fp); //2次元配列の確保 img->data=us_Calloc1(width,height); //1次元配列から2次元配列にデータを移動する for(i=0; i<height; i++){ for(j=0; j<width; j++){ img->data[i][j]=tmp[(width*i)+j]; } } ------------------------------------------------------------ --------------bmpファイルに書きこむ(一部)-------------- //bufのメモリ領域の確保 buf=us_Calloc2(width,height); for(i=0; i<height; i++){ for(j=0; j<width; j++){ buf[(width*i)+j]=img->data[i][j]; } } //BMPのファイルヘッダーの出力(省略) //BMPの情報ヘッダーの出力(省略) //画像データの出力 if(fwrite(buf,sizeof(unsigned short),size,fp)!=size){ printf("画像をBMPに書き込むことができませんでした.\n"); free(buf); fclose(fp); exit(-1); } } このように書いたのですが、うまくBMPファイルに出力できません. アドバイスよろしくお願いします.
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
うーむ。流石にこれだけではちょっと判らないですね。 取り敢えず //画像データの出力 if(fwrite(buf,sizeof(unsigned short),size,fp)!=size) ↑は画像1ピクセルにつき16ビットと言う事でしょうか? BMP情報ヘッダーの設定が16ビット用のビットフィールドに設定されていますか? 私はRAWの事は知らないのですが、RAWからBMPに変換する際、16ビット用のビットフィールドに対応したRGB5:6:5の配置をしないと正しく表示されないのでは? BMPへの変換は24ビットもしくは32ビットにすると楽です。
お礼
ありがとうございます.