Часто задаваемые вопросы: TBarCode DLL / TBarCode Library
Как сохранить растровое изображение в память
Как сохранить растровое изображение в память
Ниже приведён пример кода, показывающий, как использовать 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);
}
Альтернативные функции API
ERRCODE BCBitmapToMemory (t_BarCode *pBarCode, VOID *pHandle, LPCSTR pszFormat,
INT *pnSize, LPCRECT pRect)
Записывает штрихкод в формате изображения в блок памяти. Не требует памяти глобальной кучи (=быстрее), но не отрисовывает HRT (читаемый текст).
Даже если вы используете escape-последовательность для двоичных данных, кодировщик будет использовать преобразование кодовой страницы (пример: \x88 приводит к другому значению в Data Matrix, чем требуется).
Решение:
- Отключите преобразование кодовой страницы (используйте режим кодирования LowByte)
- Принудительно включите режим двоичного кодирования, если доступно (см. режим кодирования PDF417, Data Matrix EnforceBinaryEncoding)
Актуально для DP Premium Address и других приложений, где вы кодируете двоичные данные в 2D-символ (Data Matrix и т.д.).