Pregunta

Estoy trabajando para comprender y dibujar mi propia DLL para PDF417 (códigos de barras 2d). De todos modos, el dibujo real del archivo es perfecto y está en los límites correctos de 32 bits (como resultado monocromático). En el momento de escribir los datos, lo siguiente es un volcado de memoria copiado del volcado de memoria de C ++ Visual Studio del puntero al bmp buffer. Cada fila se asigna correctamente a 36 de ancho antes de la siguiente fila.

Lo siento por el texto que aparece en la publicación, pero mi salida estaba destinada a tener el mismo ancho de 36 bytes que el volcado de memoria para que puedas ver mejor la distorsión.

El dibujo actual tiene 273 píxeles de ancho por 12 píxeles de alto, monocromo ...

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

Aquí está el código para ESCRIBIR el archivo - literalmente inmediatamente en el momento del volcado de memoria desde arriba

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 ); 
}

Esto es lo que realmente se escribe en el archivo.

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

Observe el inicio de la distorsión con el " 0d " en el resultado de leer el archivo de nuevo en la cuarta línea, sobre el 15º byte más ... Luego, hay algunos más escalonados alrededor de los cuales, en total, desviar la imagen en 9 bytes por valor ...

Obviamente, la parte de dibujo está funcionando bien, ya que todo permanece correctamente alineado en la memoria para las 12 líneas.

¿Fue útil?

Solución

¿No debería abrir el archivo en un modo compuesto, es decir, escribible & amp; binario como en wb + ?

  

Observe el inicio de la distorsión con la " 0d "

Eso es un código ASCII para retorno de carro (CR): se agregó en algunos sistemas operativos con nueva línea (donde una nueva línea es en realidad una secuencia de CR / LF). Esto debería desaparecer una vez que comience a escribir la salida en modo binario.

Su código se ve bien de lo contrario. ¡Salud!

Otros consejos

Su 0x0A ( \ n ) se convierte al formato DOS 0x0D0A ( \ r \ n ), Porque estás escribiendo el archivo en modo texto. Cambia al modo binario.

En realidad, acabo de hacer algo similar en java (imprimir datos bmp en una impresora térmica de recibos). Hay un par de cosas que quiero compartir con ustedes:

  1. bmp image data! = un formato de imagen de microsoft. El mapa de bits de MS tiene aproximadamente 54 bytes de información de encabezado antes de los datos de imagen. (Pasé uno o dos días trabajando en esto antes de darme cuenta de la diferencia)

  2. Los datos de imagen bmp se leen de izquierda a derecha, de arriba a abajo, con el bit más significativo a la izquierda.

  3. asegúrese de que la imagen del código de barras tenga una profundidad de bits de 1. esto significa 1 bit = 1 píxel. hexadecimal " ab " es 10101011 en binario, esos 8 píxeles se rellenarán en consecuencia.

  4. si tiene un código de barras de 36 bytes de ancho, la resolución del código de barras es 288 x 12, no 273 x 12. (36 * 8 = 288).

  5. los datos de la imagen deben tener un tamaño de 432 bytes (12 filas de 36 bytes).

  6. No sé qué significa esto:

      

    De todos modos, el dibujo real del archivo es perfecto y está en los límites correctos de 32 bits (como resultado monocromático).

monocromo significa que es un color u otro. El píxel (bit de reflexión) se rellena o no.

Espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top