Preguntas frecuentes sobre TBarCode DLL / TBarCode Library
¿Cómo puedo guardar un mapa de bits en memoria?
¿Cómo puedo guardar un mapa de bits en memoria?
A continuación se muestra un ejemplo de código sobre cómo usar BCSaveImageToBuffer:
#include "windowsx.h"
// after BCCreate(..)
// generate image in buffer
LPBYTE lpBuffer;
eCode = BCSaveImageToBuffer (pBarCode, &lpBuffer, eIMBmp, nWidth, nHeight, 96.0, 96.0);
if (eCode == ErrOk)
{
// lock buffer before reading
if (GlobalLockPtr(lpBuffer))
{
// retrieve size of buffer
int nSize = GlobalSize((HGLOBAL)GlobalHandle(lpBuffer));
// process buffer
for (int i=0; i< nSize; i++)
{
BYTE byte = (static_cast<LPBYTE> (lpBuffer))[i];
// ...
}
// unlock after reading (required)
GlobalUnlockPtr(lpBuffer);
}
// free memory (required)
GlobalFreePtr(lpBuffer);
}
Funciones de API alternativas
ERRCODE BCBitmapToMemory (t_BarCode *pBarCode, VOID *pHandle, LPCSTR pszFormat,
INT *pnSize, LPCRECT pRect)
Escribe el código de barras en un formato de imagen a un bloque de memoria. No requiere memoria del heap global (= es más rápido), pero no renderiza el HRT (texto legible).
Incluso si usa una secuencia de escape para datos binarios, el codificador usará la conversión de página de códigos (ejemplo: \x88 da lugar a un valor distinto en Data Matrix del deseado).
Solución:
- Desactive la conversión de página de códigos (use el modo de codificación LowByte)
- Fuerce el modo de codificación binaria si está disponible (véase el modo de codificación PDF417, Data Matrix EnforceBinaryEncoding)
Relevante para DP Premium Address y otras aplicaciones en las que se codifican datos binarios en un símbolo 2D (Data Matrix, etc.).