質問

私はPDF417(2Dバーコード)用の独自のDLLの理解と描画に取り組んでいます。とにかく、ファイルの実際の描画は完璧で、32ビットの正しい境界内にあります(モノクロの結果として)。データを書き込む時点で、次はbmpバッファーへのポインターのC ++ Visual Studioメモリダンプからコピーされたメモリダンプです。各行は、次の行の前に36ワイドに適切に割り当てられます。

投稿のワードラップについては申し訳ありませんが、出力はメモリダンプと同じ36バイトになるように意図されていたため、歪みをよりよく見ることができます。

現在の図面は、幅273ピクセル、高さ12ピクセル、モノクロ...

00 ab a8 61 d7 18 ed 18 f7 a3 89 1c dd 70 86 f5 f7 1a 20 91 3b c9 27 e7 67 12 1c 68 ae 3c b7 3e 02 eb 00 00
00 ab a8 61 d7 18 ed 18 f7 a3 89 1c dd 70 86 f5 f7 1a 20 91 3b c9 27 e7 67 12 1c 68 ae 3c b7 3e 02 eb 00 00
00 ab a8 61 d7 18 ed 18 f7 a3 89 1c dd 70 86 f5 f7 1a 20 91 3b c9 27 e7 67 12 1c 68 ae 3c b7 3e 02 eb 00 00
00 ab 81 4b ca 07 6b 9c 11 40 9a e6 0c 76 0a fc a3 33 70 bb 30 55 87 e9 c4 10 58 d9 ea 0d 48 3e 02 eb 00 00
00 ab 81 4b ca 07 6b 9c 11 40 9a e6 0c 76 0a fc a3 33 70 bb 30 55 87 e9 c4 10 58 d9 ea 0d 48 3e 02 eb 00 00
00 ab 81 4b ca 07 6b 9c 11 40 9a e6 0c 76 0a fc a3 33 70 bb 30 55 87 e9 c4 10 58 d9 ea 0d 48 3e 02 eb 00 00
00 ab 85 7e d0 29 e8 14 f4 0a 7a 05 3c 37 ba 86 87 04 db b6 09 dc a0 62 fc d1 31 79 bc 5c 0a 8e 02 eb 00 00
00 ab 85 7e d0 29 e8 14 f4 0a 7a 05 3c 37 ba 86 87 04 db b6 09 dc a0 62 fc d1 31 79 bc 5c 0a 8e 02 eb 00 00
00 ab 85 7e d0 29 e8 14 f4 0a 7a 05 3c 37 ba 86 87 04 db b6 09 dc a0 62 fc d1 31 79 bc 5c 0a 8e 02 eb 00 00
00 ab 85 43 c5 30 e2 26 70 4a 1a f3 e4 4d ce 2a 3f 79 cd bc e6 de 73 6f 39 b7 9c db ce 6d 5f be 02 eb 00 00
00 ab 85 43 c5 30 e2 26 70 4a 1a f3 e4 4d ce 2a 3f 79 cd bc e6 de 73 6f 39 b7 9c db ce 6d 5f be 02 eb 00 00
00 ab 85 43 c5 30 e2 26 70 4a 1a f3 e4 4d ce 2a 3f 79 cd bc e6 de 73 6f 39 b7 9c db ce 6d 5f be 02 eb 00 00

ここにファイルを書き出すコードがあります-上からのメモリダンプの時点で逐語的に

FILE *stream; 
if( fopen_s( &stream, cSaveToFile, "w+" ) == 0 ) 
{ 
   fwrite( &bmfh, 1, (UINT)sizeof(BITMAPFILEHEADER), stream ); 
   fwrite( &bmi, 1, (UINT)sizeof(BITMAPINFO), stream ); 
   fwrite( &RGBWhite, 1, (UINT)sizeof(RGBQUAD), stream );
   fwrite( ppvBits, 1, (UINT)bmi.bmiHeader.biSizeImage, stream ); 
   fclose( stream ); 
}

実際にファイルに書き込まれるのは次のとおりです。

00 ab a8 61 d7 18 ed 18 f7 a3 89 1c dd 70 86 f5 f7 1a 20 91 3b c9 27 e7 67 12 1c 68 ae 3c b7 3e 02 eb 00 00
00 ab a8 61 d7 18 ed 18 f7 a3 89 1c dd 70 86 f5 f7 1a 20 91 3b c9 27 e7 67 12 1c 68 ae 3c b7 3e 02 eb 00 00
00 ab a8 61 d7 18 ed 18 f7 a3 89 1c dd 70 86 f5 f7 1a 20 91 3b c9 27 e7 67 12 1c 68 ae 3c b7 3e 02 eb 00 00
00 ab 81 4b ca 07 6b 9c 11 40 9a e6 0c 76 0d 0a fc a3 33 70 bb 30 55 87 e9 c4 10 58 d9 ea 0d 48 3e 02 eb 00
00 00 ab 81 4b ca 07 6b 9c 11 40 9a e6 0c 76 0d 0a fc a3 33 70 bb 30 55 87 e9 c4 10 58 d9 ea 0d 48 3e 02 eb
00 00 00 ab 81 4b ca 07 6b 9c 11 40 9a e6 0c 76 0d 0a fc a3 33 70 bb 30 55 87 e9 c4 10 58 d9 ea 0d 48 3e 02
eb 00 00 00 ab 85 7e d0 29 e8 14 f4 0d 0a 7a 05 3c 37 ba 86 87 04 db b6 09 dc a0 62 fc d1 31 79 bc 5c 0d 0a
8e 02 eb 00 00 00 ab 85 7e d0 29 e8 14 f4 0d 0a 7a 05 3c 37 ba 86 87 04 db b6 09 dc a0 62 fc d1 31 79 bc 5c
0d 0a 8e 02 eb 00 00 00 ab 85 7e d0 29 e8 14 f4 0d 0a 7a 05 3c 37 ba 86 87 04 db b6 09 dc a0 62 fc d1 31 79
bc 5c 0d 0a 8e 02 eb 00 00 00 ab 85 43 c5 30 e2 26 70 4a 1a f3 e4 4d ce 2a 3f 79 cd bc e6 de 73 6f 39 b7 9c
db ce 6d 5f be 02 eb 00 00 00 ab 85 43 c5 30 e2 26 70 4a 1a f3 e4 4d ce 2a 3f 79 cd bc e6 de 73 6f 39 b7 9c
db ce 6d 5f be 02 eb 00 00 00 ab 85 43 c5 30 e2 26 70 4a 1a f3 e4 4d ce 2a 3f 79 cd bc e6 de 73 6f 39 b7 9c
db ce 6d 5f be 02 eb 00 00

「0d」で歪みの始まりに注意してください。 4行目でファイルを読み戻した結果、約15バイトを超えています...次に、全体で9バイト分だけ画像をゆがめた、さらにずらしたものがいくつかあります...

明らかに、描画部分は正常に機能しています。すべてがメモリ内で12行分適切に配置されたままです。

役に立ちましたか?

解決

複合モード、つまり書き込み可能&でファイルを開くべきではありません wb + のようなバイナリ?

  

" 0d"で歪みの始まりに注意してください

これは、キャリッジリターン(CR)のASCIIコードです。一部のOSでは、改行(改行は実際にはCR / LFのシーケンスです)が追加されています。これは、バイナリモードで出力の書き込みを開始すると消えます。

それ以外の場合、コードはきれいに見えます。乾杯!

他のヒント

0x0A \ n )はDOS形式 0x0D0A \ r \ n )に変換されます。テキストモードでファイルを記述しているためです。バイナリモードに切り替えます。

実際には、Javaで同様のことを行いました(bmpデータをサーマルレシートプリンターに印刷する)。あなたと共有したいことがいくつかあります:

  1. bmp画像データ!= Microsoftの画像形式。 MSビットマップには、画像データの前に約54バイトのヘッダー情報があります。 (違いに気付く前に、これに取り組んで1日か2日過ごしました)

  2. bmp画像データは、左から右、上から下に読み取り、最上位ビットは左になります。

  3. バーコード画像のビット深度が1であることを確認します。これは、1ビット= 1ピクセルを意味します。 16進数の「ab」バイナリでは10101011であるため、これらの8ピクセルはそれに応じて塗りつぶされます。

  4. 36バイト幅のバーコードがある場合、バーコード解像度は273 x 12ではなく288 x 12です(36 * 8 = 288)。

  5. 画像データのサイズは432バイト(36バイトの12行)です。

  6. i意味がわからない:

      

    とにかく、ファイルの実際の描画は完璧で、32ビットの正しい境界内にあります(モノクロの結果として)。

モノクロとは、1色または別の色を意味します。ピクセル(思考ビット)は塗りつぶされているか、そうではありません。

これが役立つことを願って

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top