• ベストアンサー

バッファサイズについて

今画像データについて勉強しています。ビットマップファイルについてなんですが大きさを240×320の場合の時 #define WSIZE 320 /*ビットマップの幅*/ #define HSIZE 240 /*ビットマップの高さ*/ #define BSIZE 1024 /*バッファサイズ*/ と書くんですがなぜBSIZE 1024 となるかわかりません。教えてください。

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

  • ベストアンサー
  • ret
  • ベストアンサー率40% (8/20)
回答No.5

240 * 240 のビットマップデータ 1bit なら 32(一行)*240(高さ) 4bit なら 64(一行)*240(高さ) 8bit なら 256(一行)*240(高さ) 24bit なら 768(一行)*240(高さ) 32bit なら 1024(一行)*240(高さ) になります。 ビット数に応じてサイズは変わります。 RGBQUADも1bit, 4bit, 8bitの際は必要です。 また、1, 4, 8, 24bitの時には 1行あたりに4byte境界が発生します。 BMPのフォーマットのURLを書いておきますね

参考URL:
http://www.kk.iij4u.or.jp/~kondo/bmp/
gfgdhggddg
質問者

お礼

ありがとうございました。参考にしてやってみたいと思います☆

その他の回答 (5)

  • ret
  • ベストアンサー率40% (8/20)
回答No.6

済みません、 下の内容で 240*240 と書きましたが、 256*256 のサイズの間違いですm(_ _)m

回答No.4

> では256×256の大きさならいくつ必要ですか? # 'おんぶに抱っこ'ですか!? '少なくとも' 256 x 256 x 1画素に要するbit数 / 8 バイト必要です。

gfgdhggddg
質問者

補足

すみません・・・。そこのサイズが合わないと実行しても画像ビューアーで見れなくてどうしてもしりたくて><。

回答No.3

> どのような大きさでも1024ずつ読むのでしょうか? そんなこと誰にもわかりません。 コードを読まない限り。

gfgdhggddg
質問者

補足

そうなのです><。では256×256の大きさならいくつ必要ですか?

  • ret
  • ベストアンサー率40% (8/20)
回答No.2

まず、ビットマップのビット数は何ビットなのですか? 1,4,8,24,32のどのビット数ですか? 今回の質問内容では答えの使用がありません。 8bitで RGBQUAD * 256をunsigned charでおこなったためとも考えられなくは無いので…。 (まず、ありえないでしょうが…)

gfgdhggddg
質問者

補足

ビット数はわかりません。その参考書には240×320の大きさのビットマップのファイルから読み込むプログラムが書いており・・・。

回答No.1

そんなこと誰にもわかりません。 おそらくファイル丸ごと一気に読むのではなく、1024づつ読むつもりなのでしょう。

gfgdhggddg
質問者

補足

どのような大きさでも1024ずつ読むのでしょうか?

関連するQ&A

  • プログラム(C)

    #include <stdio.h> #include <stdlib.h> #define FNAME "smp.bmp" #define WSIZE 256 #define HSIZE 256 #define BSIZE 1024 int main(void) { struct BMPFILEHEADER { ・   ・ }; struct BMPINFOHEADER { ・   ・ }; unsigned char img[HSIZE][WSIZE][3]; unsigned char buf[BSIZE]; struct BMPFILEHEADER lpHead; struct BMPINFOHEADER lpInfo; FILE *fp; int i; int j; int k; fp = fopen(FNAME,"rb"); if (fp==NULL) { printf("ファイルをオープンできません\n"); return 0; } fread(&lpHead.bfType, sizeof(unsigned short),1,fp); fread(&lpHead.bfSize, sizeof(unsigned int),1,fp); fread(&lpHead.bfReserved1, sizeof(unsigned short),1,fp); fread(&lpHead.bfReserved2, sizeof(unsigned short),1,fp); fread(&lpHead.bf0ffBits, sizeof(unsigned int),1,fp); fread(&lpInfo, sizeof(struct BMPINFOHEADER),1,fp); for(i=0;i<HSIZE;i++) { fread(buf,sizeof(unsigned char),WSIZE*3,fp); for(j=0;j<WSIZE;j++) { for(k=0;k<3;k++) { img[HSIZE-1-i][j][k]=buf[j*3+k]; } } } fclose; return 0; } このプログラムはBMP画像を読み込むプログラムなんですが このプログラムに画素値を出力するプログラムにしたいのですがうまくできません。 結果は(真っ白な画像の時)255255255・・・255255と出力したいのです。白黒画像なのでR=G=Bで1画素値は255だけでいいのですが。どうしても255255255や25500などとでてしまいます。 アドバイスお願いします。(800字までなので構造体の宣言は抜いてしましました) 。

  • ウィンドウサイズを変更するには?

    ウィンドウサイズを変更したいと思っています。別ウィンドウを開く時にサイズを指定するのではなく、現在のウィンドウについてです。 window.resizeTo(wSize, hSize); では外枠を含んだサイズになるようで、インナー(実際見ているサイズ)を指定してあげたいと思っています。IE、NS、MAC、WIN等書き分けないといけないように思いますが、どなたかサンプル等教えて頂けないでしょうか。 よろしくお願い致します。

  • バッファのデータをビットマップで表示するにはどうしたら良いんでしょうか?

    visual C++ で 1.カメラ(静止画)から得た画像をバッファに取り込む。 2.バッファにあるデータを(配列で)ビットマップで表示する。 にはどうしたら良いんでしょうか? また、他に何か良い方法があったら教えて下さい。

  • VB6.0での画像縮小版表示

    VB6.0での画像縮小版表示 こんにちは エクスプローラでファイル一覧表示するとき画像ファイルの縮小版表示が出来ます。 これと同じようなことをVB6.0で行おうとしました。 例えばファイルが10個あったら10個並べて表示します。 Imageを使いサイズを調整して出来ました。 しかし、問題がありました。メモリーを大量に消費します。 このためメモリーの少ないPCだと極端に遅くなります。 エクスプローラで縮小版表示すると遅くないです。 ということは良い方法があるのではないか、自分のやり方が悪いのではないかと思います。 良い方法を教えていただけませんか。 今のやり方 MotoH = ImgSum(Cunt).Height MotoW = ImgSum(Cunt).Width ImgSum(Cunt).Picture = LoadPicture("Fileのフルパス名") Hsize = ImgSum(Cunt).Height Wsize = ImgSum(Cunt).Width SyukusyaH = MotoH / Hsize SyukusyaW = MotoW / Wsize If SyukusyaH < SyukusyaW Then Syukusya = SyukusyaH Else Syukusya = SyukusyaW End If ImgSum(Cunt).Height = Hsize * Syukusya mgSum(Cunt).Width = Wsize * Syukusya ImgSum(Cunt).Stretch = True 要は読み込んだ画像を用意したイメージのサイズに合わせて表示しています。 よろしくお願いいたします。

  • エクセルのファイルサイズ

    エクセルファイル内で「.BMP」の画像を沢山使用しているのですが、 ファイルのプロパティでファイルサイズを見ると、明らかに画像のデータ量が入っていないようなサイズになっています。 ビットマップの画像はファイルサイズに反映されないとかいうことは あるのでしょうか?

  • ユーザバッファを使用した場合としなかった場合では何が違うのか

    以下のプログラムのサイズを変えて消費時間を測定しました。 ユーザバッファを使用した場合としなかった場合では(特にサイズが小さい場合)消費時間に差が出たのですが何故でしょうか? プログラムの高速化に対してのユーザバッファの役割を教えていただきたいです。 よろしくお願いします。 測定結果 W_BYTE(サイズ)___ユーザバッファ使用(秒)___ユーザバッファ使用なし(秒) 10_______________0:02.75_____________________2:54.40 100______________0:01.55_____________________0:18.75 1000_____________0:01.40_____________________0:03.11 10000____________0:01.27_____________________0:01.33 100000___________0:01.12_____________________0:01.13 1000000__________0:01.11_____________________0:01.11 3000000__________0:01.10_____________________0:01.10 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/time.h> #include <unistd.h> typedef unsigned char UCHAR; #define DIM1 1000 #define DIM2 1000 #define DIM3 3 #define MAX_REPEAT 100 //出力繰り返し回数 void write_ppm_cip(UCHAR [][DIM2][DIM3],char *,int ,int ); UCHAR org[DIM1][DIM2][DIM3]; int main(void) { int i; int dim1,dim2,dim3; /***** 配列の初期化 *****/ for(dim1=0;dim1<DIM1;dim1++) for(dim2=0;dim2<DIM2;dim2++) for(dim3=0;dim3<DIM3;dim3++) org[dim1][dim2][dim3]=(UCHAR)((dim1*200+dim2*dim2+dim3*dim3)%256); for(i=0;i<MAX_REPEAT;i++) { write_ppm_cip(org,"/tmp/img.ppm",DIM1,DIM2); // sleep(1); /* 一定時間待つ */ //system("/bin/sync"); /* ディスク上のデータをメモリと同期 */ } return 0; } /* 一度に書き込むサイズ(バイト) */ //#define W_BYTE DIM1*DIM2*DIM3 #define W_BYTE 10 /* CIP形式の画像データよりPPMファイル作成 */ void write_ppm_cip(UCHAR data_buf[][DIM2][DIM3],char *fname,int width,int height) { FILE *fp; /* ファイルを開く */ if((fp = fopen(fname, "wb")) == NULL) { fprintf(stderr, "file(%s) can't open\n", fname) ; exit(1) ; } setvbuf(fp,NULL,_IONBF,0); /* ユーザバッファを使用しない場合,有効にする */ fprintf(fp, "P6\n") ; /* カラー画像かつバイナリーデータの記号 */ fprintf(fp, "%d %d\n", width, height) ; /* 画像の幅(列数)と高さ(行数) */ fprintf(fp, "255\n") ; /* 最大値 */ { /* 画像データをrepeat(+1)個に分割して書き込み */ int i; int repeat=(DIM1*DIM2*DIM3)/(W_BYTE); /* 分割数 */ int rest=DIM1*DIM2*DIM3-repeat*(W_BYTE); /* 余りデータ量 */ UCHAR *pt=(UCHAR *)&data_buf[0][0][0]; /* 書き込むデータの位置を持つポイ ンタ */ for(i=0;i<repeat;i++) { fwrite(pt, sizeof(UCHAR), W_BYTE, fp); pt += W_BYTE; } if(rest > 0) fwrite(pt, sizeof(UCHAR), rest, fp); } fclose(fp); /* ファイルを閉じる.fflush()と同じ効果がある. */ }

  • バッファーについて

    画像や動画をべつのファイルに移動させるときにfast copyという ソフトを使っているのですが、その時にバッファーが32という 数値なのですがこれは速度と関係あるのでしょうか? 数値を上げられるようなのですが、上限が1万くらいまであるので どこまで上げたらいいかわかりません

  • 教えてください。

    画像を読み込んでRだけの値のピクセル値をだしたいのですがうまくいきません。 ピクセルデータの読み込みは for(i=0;i<HSIZE;i++) { fread(buf,sizeof(unsigned char),WSIZE*3),fp); for(j=0;j<WSIZE;j++) { for(k=0;k<3;k++) { img[HSIZE-1-i][j][k]=buf[j*3+k]; } } } これにprintfを加えてピクセル値の値を出したいのです。 i・縦のカウンタj・横のカウンタ・k・RGBのカウンタ

  • ストリームのバッファサイズ

    前から疑問に思っていたのですが、iTunes初期設定内の 『ストリームのバッファサイズ』ってどういう意味でしょうか?多分ラジオを聴くときに関係しているんですよね? 現在は『大』にしていますが(意味もわからず…)『小』にした場合とどんな違いが出てくるのでしょう。前に試したときは特に変化はなかったような気がするのですが。。。

    • ベストアンサー
    • Mac
  • バッファについて

    MOにもZIPにもバッファというものがあります。 これは、高速なCPUと処理の遅い周辺機器とのや り取りをスムーズにするためにデータを一時蓄 えておく機能でよろしいでしょうか。 スーパーディスクには20MBなんてのもあるのに、 どうしてMOでは2MBで済むんでしょうか。また、 カタログによっては、バッファが書いてなくて、 キャッシュ、という表示になっているものも あります。キャッシュ=バッファでしょうか?

専門家に質問してみよう