bmp 画像の読み取りについて質問を受けました。bmp 画像のピクセル値 (R、G、B 値) を取得するにはどうすればよいですか? C プログラミング言語の使用を手伝ってくれる人はいますか?
3 に答える
注: BMP にアルファ チャネルがある場合は、アルファ値用に追加のバイトを取得する必要がある場合があります。その場合、イメージは になり、その 4 番目のインデックスを保持するためimage[pixelcount][4]
に別の行を追加します。getc(streamIn)
私のBMPはそれを必要としないことが判明しました。
// super-simplified BMP read algorithm to pull out RGB data
// read image for coloring scheme
int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values
FILE *streamIn;
streamIn = fopen("./mybitmap.bmp", "r");
if (streamIn == (FILE *)0){
printf("File opening error ocurred. Exiting program.\n");
exit(0);
}
int byte;
int count = 0;
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header
for(i=0;i<1024;i++){ // foreach pixel
image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel
image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte
image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue...
printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]);
}
fclose(streamIn);
〜ロクタス
簡単な方法は、選択したプラットフォームに適した画像操作ライブラリを見つけて使用することです。
- Linux ImLib / GDK-Pixbuf(Gnome / GTK) / QT Image(KDE / Qt)は、必要なことを実行できるはずです。
- Windows適切なシステムライブラリに精通していませんが、MSDNで「ビットマップ」を検索することから始めるのがよいでしょう。
- Mac OSX Cocoaには、いくつかの画像操作機能があります。この記事を参照してください。
難しい方法は、ファイルを開いて、その中のバイナリデータを実際に解釈することです。これを行うには、 BMPファイル仕様が必要です。最初に簡単な方法を試すことをお勧めします。
BMPファイル形式を調べる必要があります。非圧縮の24ビットBMPファイルを読み取る方が簡単です。先頭にヘッダーがあり、各ピクセルのRGB値が含まれているだけです。
これを開始するには、 http://en.wikipedia.org/wiki/BMP_file_formatで2x2ビットマップイメージの例を確認してください。以下の手順に従ってください。
- ウィキペディアに表示される2x2BMP画像を作成します。
- Cプログラムを使用して、ファイルをバイナリモードで開きます。
- バイト位置54にシークします。
- 3バイトを読み取ります。
バイトはそれぞれ0、0、255になります。(順序がRGBかどうかはわかりません。これまでずっと前に行っていたので、順序はRGBではないと思います。これを確認してください。)
それと同じくらい簡単です!BMPのヘッダーを調べて、形式について詳しく理解してください。