一応完成しました。
コード:
#include<stdio.h>
#include<graph.h>
int main(void){
FILE *fp;
int a,b,c,d;
int i;
int mapx,mapy;
int x,y;
fp=fopen("C:\\~省略~\\参考資料2\\dog2.bmp","rb");
//ファイルヘッダ
//ファイルの種類(BM)
for(i=0;i<2;i++){
//fscanf(fp,"%c ",&a);
a=getc(fp);
printf("%c",a);
}
printf("\n");
//ファイルサイズ
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("ファイルサイズ\t0x%02x%02x%02x%02x\t%ldバイト\n",d,c,b,a,d*256*256*256+c*256*256+b*256+a);
//予約領域(0らしい・・・)
for(i=1;i<=2;i++){
a=getc(fp);
b=getc(fp);
printf("予約領域%d\t0x%x%x\n",i,b,a);
}
//画像データまでのオフセット(意味不明)
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("画像データまでのオフセット\t%ld\n",d*256*256*256+c*256*256+b*256+a);
//情報ヘッダ
//情報ヘッダのサイズ
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("情報ヘッダのサイズ\t%ld\n",d*256*256*256+c*256*256+b*256+a);
//画像の高さ
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("画像の縦幅\t%ldピクセル\n",mapx=d*256*256*256+c*256*256+b*256+a);
//画像の幅
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("画像の横幅\t%ldピクセル\n",mapy=d*256*256*256+c*256*256+b*256+a);
//プレーン数(常に1)<-不明
a=getc(fp);
b=getc(fp);
printf("プレーン数\t%d\n",b*256+a);
//1画素当たりの色数
a=getc(fp);
b=getc(fp);
printf("1画素当たりの色数\t%dビット\n",b*256+a);
//圧縮形式
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("圧縮形式?\t%ld\n",d*256*256*256+c*256*256+b*256+a);
//画像データのサイズ
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("画像データのサイズ\t%ldバイト\n",d*256*256*256+c*256*256+b*256+a);
//水平解像度
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("水平解像度\t%ldppg\n",d*256*256*256+c*256*256+b*256+a);
//垂直解像度
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("垂直解像度\t%ldppg\n",d*256*256*256+c*256*256+b*256+a);
//パレットの色数
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("パレットの色数\t\t\t%ld\n",d*256*256*256+c*256*256+b*256+a);
//重要パレットのインデックス
a=getc(fp);
b=getc(fp);
c=getc(fp);
d=getc(fp);
printf("重要パレットのインデックス\t%ld\n",d*256*256*256+c*256*256+b*256+a);
//データ部
//ウィンドウの作成
gl_openwin(-1,-1,mapx,mapy,1);
for(y=mapy;0<y;y--){
for(x=0;x<mapx;x++){
//色
a=getc(fp);
b=getc(fp);
c=getc(fp);
//点の描写
gl_setpixel(x,y,RGB(c,b,a));
//ずれの修正
if(x==mapx-1)
for(i=0;i<mapx%4;i++)
getc(fp);
}
}
fclose(fp);
}
ついに完成しました。
これからが本番ですが・・・
一応出来上がったものを張っておきます。
(スタディcようなので起動はできないと思います。ウィンドウの作成と点の描写を書き換えてください)
予想以上に描写が遅かったです・・・