前提
bmpファイルの色の替え方がわかりません。
実現したいこと
bmpファイルの色を変更する
該当のソースコード
#include<stdio.h> #include<stdlib.h> #include<stdint.h> int main(int argc,char *argv[]){ uint32_t width,height; uint8_t w[4],h[4]; FILE *fp; if(argc!=2){ fprintf(stderr,"Usage:%sfilename\n",argv[0]); exit(1); } fp=fopen(argv[1],"rb"); if(fp==NULL){ fprintf(stderr,"File %s not opened\n",argv[1]); exit(1); } fseek(fp,16,SEEK_SET); fread(w,sizeof(uint8_t),4,fp); fread(h,sizeof(uint8_t),4,fp); fclose(fp); width=((w[0]*256+w[1])*256+w[2])*256+w[3]; height=((h[0]*256+h[1])*256+h[2])*256+h[3]; printf("%s: width=%d,height=%d\n",argv[1],width,height); return 0; }
これを一部変えればbmpファイルの色を変更できるといわれたのですがどこを書き換えればいいのかわからないので教えて欲しいです。
./a.out (Bの指定色)(Gの指定色)(Rの指定色)
でbmpファイルの全体の色を変更するようにしなければなりません。
すいません./a.out (Bの指定色)(Gの指定色)(Rの指定色)ではなく
./a.out (bmpファイル) (Bの指定色)(Gの指定色)(Rの指定色)です
bmp ファイルフォーマットをお調べになれば分かると思います。
> これを一部変えればbmpファイルの色を変更できるといわれたのですが
それははっきり言って大嘘です。ファイルのヘッダ情報から分かる画像の横幅、縦幅を求めているだけです。画素情報を読み込んでいませんし、コードを見るとヘッダ情報のフォーマットの意識も恐らく間違えています。ビットマップファイルと言っても様々なフォーマットが考えられるので、簡単にはいきません。一部変更どころではなく、大幅に追加、修正でしょうね。
https://ja.wikipedia.org/wiki/Windows_bitmap
また、そもそもですが、
> どこを書き換えればいいのかわからないので教えて欲しいです。
「全く分からないので一からすべて教えてほしい」と言うのはteratailでは丸投げ案件として歓迎されていませんし、大抵の場合は回答を避けられます。
[質問するときのヒント] https://teratail.com/help/question-tips
./a.out (bmpファイル) (Bの指定色)(Gの指定色)(Rの指定色)
って、画像全体を一色で塗りつぶすってこと? そもそも課題に無理がある気が…。
あなたの回答
tips
プレビュー