常见问题 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)。
即使您为二进制数据使用转义序列,编码器仍会进行代码页转换(示例:\x88 在 Data Matrix 中会转换为与预期不同的值)。
解决方案:
- 关闭代码页转换(使用 LowByte 编码模式)
- 如果可用,强制使用二进制编码模式(参见 PDF417 编码模式、Data Matrix 的 EnforceBinaryEncoding)
适用于 DP Premium Address 以及其他需要在二维符号(Data Matrix 等)中编码二进制数据的应用场景。