| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | 
							- #include "stdafx.h"
 
- #include "CreateQRCodeImage.h"
 
- #include "QRCode\qrencode.h"
 
- #include "shared\TextConvert.h"
 
- #define QRCODE_TEXT					"http://www.ultramundum.org/index.htm";		// Text to encode into QRCode
 
- #define OUT_FILE					"C:/temp/test.bmp"								// Output file name
 
- #define OUT_FILE_PIXEL_PRESCALER	8											// Prescaler (number of pixels in bmp file for each QRCode pixel, on each dimension)
 
- #define PIXEL_COLOR_R				0											// Color of bmp pixels
 
- #define PIXEL_COLOR_G				0
 
- #define PIXEL_COLOR_B				0
 
- CCreateQRCodeImage::CCreateQRCodeImage(void)
 
- {
 
- }
 
- CCreateQRCodeImage::~CCreateQRCodeImage(void)
 
- {
 
- }
 
- unsigned char* CCreateQRCodeImage::CreateImage(CString text, int &size)
 
- {
 
- 	char*			szSourceSring = QRCODE_TEXT;
 
- 	unsigned int	unWidth, x, y, l, n, unWidthAdjusted, unDataBytes;
 
- 	unsigned char*	pRGBData, *pSourceData, *pDestData;
 
- 	QRcode*			pQRC;
 
- 	unsigned char* bitmapData = NULL;
 
- 	CStringA a;
 
- 	CTextConvert::ConvertToUTF8(text, a);
 
- 	if (pQRC = QRcode_encodeString(a, 0, 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)))
 
- 		{
 
- 			return NULL;
 
- 		}
 
- 			
 
- 			// 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 = -((int)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;
 
- 		
 
- 		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++;
 
- 			}
 
- 		}
 
- 		size = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + unDataBytes;
 
- 		bitmapData = new unsigned char[size];
 
- 		memcpy(bitmapData, &kFileHeader, sizeof(BITMAPFILEHEADER));
 
- 		memcpy((bitmapData + sizeof(BITMAPFILEHEADER)), &kInfoHeader, sizeof(BITMAPINFOHEADER));
 
- 		memcpy((bitmapData + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)), pRGBData, unDataBytes);
 
- 		/*if (!(fopen_s(&f, OUT_FILE, "wb")))
 
- 		{
 
- 		fwrite(&kFileHeader, sizeof(BITMAPFILEHEADER), 1, f);
 
- 		fwrite(&kInfoHeader, sizeof(BITMAPINFOHEADER), 1, f);
 
- 		fwrite(pRGBData, sizeof(unsigned char), unDataBytes, f);
 
- 		fclose(f);
 
- 		}*/
 
- 		free(pRGBData);
 
- 		QRcode_free(pQRC);
 
- 	}
 
- 	else
 
- 	{
 
- 		printf("NULL returned");
 
- 	}
 
- 	return bitmapData;
 
- }
 
 
  |