24 ビット ビットマップをロードし、2 つのヘッダーを読み取り、画像データを char* 変数に格納する ac/c++ プログラムを Linux ボックスで実行しています。変数の内容を生のバイナリ ファイルにダンプし、それを元のビットマップ + オフセットと比較することで、これが機能することを確認しました。私はHEREのコードを変更せずに使用し、RGB とボトムアップに注意して並べ替えます。
X、Y、幅、高さなどの座標のリストがある場合、これらをイメージのバイト オフセットに変換するにはどうすればよいでしょうか。
MY CODEでは、1 つのスキャンラインの幅とグリフの位置を計算して Y を見つけ、y+1 ごとにスキャンラインを追加していることがわかります。同様に、XI は一度に 3 バイトずつ繰り返します。最後に、これらの 3 バイトを一時的な文字配列に順番に格納します。
実際には、グリフは平滑化されていない 0xFF または 0x00 であるため、ピクセル データは必要ありません。私のビットがどこにあるかを確認するためにそれを含めました。
HEREは私が使用している画像です。
編集: - - - - - - - - - - - - - - - - - - - - - -
後述するように、私の数学は少し癖がありました。i、j、k ループの行を次のように修正しました。
tmpChar[i][j][k] = img.data[(((Y+j) * imgWidth) + (X + i)) * imgBPP + k];
私のプログラムの出力に関しては、ご覧のとおり、ビットマップを正常にロードし、ヘッダー情報は適切ですが、tmpChar 配列の内容をすべて 0xFF で表示しようとすると (符号付き int を使用したため、0xFF = -1 および 0x00 = +0)