如何在福知图书馆生成的QR码中添加白色边框

时间:2019-03-27 10:44:47

标签: visual-c++ qr-code bmp

我正在使用Fukuchi的库在可视c ++应用程序中生成Qr代码,然后将其保存为位图图像。

我想在QR图像周围添加白色填充,以提高扫描质量。

这是我的代码:

bool generate_qrCodeP(char *dataString,char *filename){

char* szSourceSring = dataString;
unsigned int    unWidth, x, y, l, n, unWidthAdjusted, unDataBytes;
unsigned char*  pRGBData, *pSourceData, *pDestData;
QRcode*         pQRC;
FILE*           f;
string sBuf;

// Compute QRCode
if (pQRC = QRcode_encodeString(szSourceSring, 1, QR_ECLEVEL_H, QR_MODE_8, 1)){

 unWidth = pQRC->width;
 unWidthAdjusted = unWidth * OUT_FILE_PIXEL_PRESCALER * 3;
if (unWidthAdjusted % 4)
  unWidthAdjusted = (unWidthAdjusted / 4 + 1) * 4;
  unDataBytes = unWidthAdjusted * unWidth * OUT_FILE_PIXEL_PRESCALER;

// Allocate pixels buffer
if (!(pRGBData = (unsigned char*)malloc(unDataBytes)))
{
 //out of memory 
 return false;
}

// Preset to white
memset(pRGBData, 0xff, unDataBytes);

// Prepare bmp headers
BITMAPFILEHEADER kFileHeader;
kFileHeader.bfType = 0x4d42;  // "BM"
kFileHeader.bfSize =    sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER) +unDataBytes;
kFileHeader.bfReserved1 = 0;
kFileHeader.bfReserved2 = 0;
kFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) +sizeof(BITMAPINFOHEADER);

BITMAPINFOHEADER kInfoHeader;
kInfoHeader.biSize = sizeof(BITMAPINFOHEADER);
kInfoHeader.biWidth = unWidth * OUT_FILE_PIXEL_PRESCALER;
kInfoHeader.biHeight = unWidth  * OUT_FILE_PIXEL_PRESCALER;
kInfoHeader.biPlanes = 1;
kInfoHeader.biBitCount = 24;
kInfoHeader.biCompression = BI_RGB;
kInfoHeader.biSizeImage = 0;
kInfoHeader.biXPelsPerMeter = 0;
kInfoHeader.biYPelsPerMeter = 0;
kInfoHeader.biClrUsed = 0;
kInfoHeader.biClrImportant = 0;

// Convert QrCode bits to bmp pixels
pSourceData = pQRC->data;
for(y = 0; y < unWidth; y++)
{
 pDestData = pRGBData + unWidthAdjusted * y * OUT_FILE_PIXEL_PRESCALER;
 for(x = 0; x < unWidth; x++) {
  if (*pSourceData & 1){
    for(l = 0; l < OUT_FILE_PIXEL_PRESCALER; l++) {
    for(n = 0; n < OUT_FILE_PIXEL_PRESCALER; n++){
      *(pDestData +     n * 3 + unWidthAdjusted * l) =  PIXEL_COLOR_B;
      *(pDestData + 1 + n * 3 + unWidthAdjusted * l) =  PIXEL_COLOR_G;
      *(pDestData + 2 + n * 3 + unWidthAdjusted * l) =  PIXEL_COLOR_R;
    }
    }
  }
   pDestData += 3 * OUT_FILE_PIXEL_PRESCALER;
   pSourceData++;
  } 
}
if (!(fopen_s(&f, filename, "wb"))){
 fwrite(&kFileHeader, sizeof(BITMAPFILEHEADER), 1, f);
 fwrite(&kInfoHeader, sizeof(BITMAPINFOHEADER), 1, f);
 fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f);
 fclose(f);
}

// Free data
free(pRGBData);
QRcode_free(pQRC);

return true;
}

0 个答案:

没有答案