• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:icon format について)

icon formatとは?

このQ&Aのポイント
  • Visual Studio.NET 2003のMFCを使用して、icon formatについて調査しました。
  • iconクラスを作成し、アイコンのヘッダ情報やデータを読み込むメソッドを実装しました。
  • しかし、SetPixelでドローする際に変な表示になる問題が発生しました。ICONフォーマットについて教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.2

RGBQUAD へのデータ読みこみに for(int i=0;i<256;i++) としていますが、ご自分の決まったデータならこれでよろしいでしょうが、 一般的には、個数は、default で、2、16、256個あります。 bmp データサイズを小さくしたいため、色数を指定した場合、2の場合を除き、 これより少ないこともあります。 bitmap info header を見てこれは決めないと一般性は出ません。 (一般性といえば、JPEGデータのこともあり、RLE4, RLE8 などの圧縮もあります)

thulala
質問者

お礼

ありがとうございました。 とりあえずは、一部のアイコンだけですが、 表示できるようになりました。 ありがとうございます。

その他の回答 (1)

  • mcWalker
  • ベストアンサー率69% (27/39)
回答No.1

拡張子.bmpが付くファイルに bmp file header, bmp info header があるように、拡張子.icoのファイルにも icon file header, icon info header があります。 この読み方だと、24bit Color前提ですが、画像を現す方法は、カラーなら、4 bits, 8 bits, 32 bits (広げれば、16 や 32 も)あります。 header file に定義の構造体があると思います。 でなければ、サンプル・コードを当たるとよいと思います。 icon 表示の API もあります。

thulala
質問者

補足

bitmap256色なら、読み込めるようになりました。 /////////////////////// void IconDataRead(FILE *fp,unsigned char *parette) { fread(parette,sizeof(unsigned char),1,fp); }; void IconHeadRead(FILE *fp,int *width,int *height,RGBQUAD rgbQuad[256]) { char h;long l;unsigned long ul;unsigned short us;short s;unsigned char uc; fread(&h,sizeof(unsigned char),1,fp); fread(&h,sizeof(unsigned char),1,fp); fread(&l,sizeof(long),1,fp); fread(&s,sizeof(short),1,fp); fread(&s,sizeof(short),1,fp); fread(&l,sizeof(long),1,fp); fread(&ul,sizeof(unsigned long),1,fp); fread(&l,sizeof(long),1,fp);*width=l; fread(&l,sizeof(long),1,fp);*height=l; fread(&l,sizeof(unsigned short),1,fp); fread(&us,sizeof(unsigned short),1,fp); fread(&ul,sizeof(unsigned long),1,fp); fread(&ul,sizeof(unsigned long),1,fp); fread(&l,sizeof(long),1,fp); fread(&l,sizeof(long),1,fp); fread(&ul,sizeof(unsigned long),1,fp); fread(&ul,sizeof(unsigned long),1,fp); for(int i=0;i<256;i++) { fread(&uc,sizeof(unsigned char),1,fp); rgbQuad[i].rgbBlue=uc; fread(&uc,sizeof(unsigned char),1,fp); rgbQuad[i].rgbGreen=uc; fread(&uc,sizeof(unsigned char),1,fp); rgbQuad[i].rgbRed=uc; fread(&uc,sizeof(unsigned char),1,fp); } }; }; ///////////////////////// アイコンも同じようだと思うのですが、 少し違うようです。 ありがとうございます。 もう少し探ってみます。