22t1645h
@22t1645h (Na Bane)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

c言語によるwindows bitmap画像の色成分(R,G,B)を分離するプログラム

c言語の質問ですWindows Bitmap形式で保存
された画像ファイル bmpsample.bmp を読み込み,
Red,Blue,Greenのいづれかの色情報のみを残し
て他の色情報を排除した画像を作成しなさい。

#include
#include

typedef struct {
unsigned short bfType;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
} BitmapFileHeader;

typedef struct {
unsigned int biSize;
int biWidth;
int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
int biXPixPerMeter;
int biYPixPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
} BitmapInfoHeader;

int main(void) {

FILE *fp;


BitmapFileHeader fileh;
BitmapInfoHeader infofileh;

fp = fopen("bmpsample.bmp", "rb");
if (fp == NULL) {
    fprintf(stderr, "Can't write file\n");
    exit(1);
}

fread(&(fileh.bfType), 2, 1, fp);
fread(&(fileh.bfSize), 4, 1, fp);
fread(&(fileh.bfReserved1), 2, 1, fp);
fread(&(fileh.bfReserved2), 2, 1, fp);
fread(&(fileh.bfOffBits), 4, 1, fp);

fread(&(infofileh.biSize), 4, 1, fp);
fread(&(infofileh.biWidth), 4, 1, fp);
fread(&(infofileh.biHeight), 4, 1, fp);
fread(&(infofileh.biPlanes), 2, 1, fp);
fread(&(infofileh.biBitCount), 2, 1, fp);
fread(&(infofileh.biClrImportant), 4, 1, fp);
fread(&(infofileh.biSizeImage), 4, 1, fp);
fread(&(infofileh.biXPixPerMeter), 4, 1, fp);
fread(&(infofileh.biYPixPerMeter), 4, 1, fp);
fread(&(infofileh.biClrUsed), 4, 1, fp);
fread(&(infofileh.biClrImportant), 4, 1, fp);

}

ここまであっているかもわかりませんが、この先が全くわかりません。教えていただけると幸いです。

0

1Answer

C言語のタグは C です。Twitterのハッシュタグとは違うので、#も不要です。
正しいタグを記述しないとタグ検索で表示されず、回答者の目につきにくくなります。
ソースはインデントが崩れるので、正しくコードブロックで囲んでください。

ここまであっているかもわかりませんが、この先が全くわかりません。教えていただけると幸いです。

書いたところがあっているかすら分からないのに、その先に進める筈がないでしょう。あと、学校の課題なら、きちんと自分で調べましょう。他人にやってもらったところで、この先の授業についていけなくなると思いますよ。

まずやるべきことは、ビットマップのヘッダを読み込んだ結果をprintf等で出力してみて、画像サイズや読み込みに必要な情報を取得出来ていることを確認してください。もしビットマップの構造を理解していないなら、そこからです。ビットマップの構造は、既に色々なWebサイトで詳細に解説されているので、それらを読んだ方が早いと思います。

また、画像のフォーマット(8bit,24bit,32bit,RLE圧縮の有無等)によって、読み込み方が変わります。読み込む画像が指定されているなら、その画像用の読み込み方だけ実装すればいいのですが、汎用的に読み込めるようにするなら、対応したいフォーマット全ての読み込み方を実装する必要があります。(圧縮されているビットマップはほぼ見かけないので、考慮は要らないと思いますが)

0Like

Your answer might help someone💌