(C ++/MFC) Wie kann ich ein Bild auf einem Epson -Drucker drucken?C++

Programme in C++. Entwicklerforum
Anonymous
 (C ++/MFC) Wie kann ich ein Bild auf einem Epson -Drucker drucken?

Post by Anonymous »

Ich habe ein Projekt angeschlossen, bei dem das Ziel darin besteht, einen thermischen Drucker über USB oder RS232 für Quittungsausgaben programmatisch zu verwenden. Ich muss Escpos -Befehle verwenden, um die Quittung zu drucken. Ich bin hier → Bildbeschreibung hier
Dieses QR -Bild ist Bitmap < /p>

Code: Select all

{
CString csFileName = fileName;
csFileName = csFileName.MakeUpper();

// 1. BMP image load
HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, fileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_MONOCHROME);
if (hBmp == NULL) return ERR_PRT_WRITE;

if (hBmp == NULL)
return ERR_PRT_WRITE;
CBitmap* pBmp = CBitmap::FromHandle(hBmp);
BITMAP bmpInfo;
memset(&bmpInfo, 0, sizeof(bmpInfo));
pBmp->GetBitmap(&bmpInfo);

if (bmpInfo.bmBitsPixel != 1)
{
pBmp->DeleteObject();
return ERR_PRT_WRITE;
}

int pixelWidth = bmpInfo.bmWidth;
int height = bmpInfo.bmHeight;
int widthBytes = (pixelWidth + 7) / 8;
int paddedRowBytes = bmpInfo.bmWidthBytes;
int totalPaddedBytes = paddedRowBytes * height;

BYTE* paddedData = new BYTE[totalPaddedBytes];
if (pBmp->GetBitmapBits(totalPaddedBytes, paddedData) != totalPaddedBytes)
{
delete [] paddedData;
return ERR_PRT_WRITE;
}

BYTE* rasterData = new BYTE[widthBytes * height];
for (int row = 0; row < height; row++)
{
BYTE* src = paddedData + ((height - 1 - row) * paddedRowBytes);
BYTE* dst = rasterData + (row * widthBytes);
memcpy(dst, src, widthBytes);
}
delete [] paddedData;

const char initPrinter[] = "\x1B\x40";   // ESC @
_printer.write((LPSTR)initPrinter, strlen(initPrinter));

const char pageModeOn[] = "\x1B\x4C";      // ESC L
_printer.write((LPSTR)pageModeOn, strlen(pageModeOn));

const char setPageArea[] = {
0x1B, 0x57,       // ESC W
0x00, 0x00,
0x00, 0x00,
0x80, 0x01,
0x37, 0x02
};
_printer.write((LPSTR)setPageArea, sizeof(setPageArea));

const char setAbsPosImage[] = { 0x1B, 0x24, 0x00, 0x00 };  // ESC $
_printer.write((LPSTR)setAbsPosImage, sizeof(setAbsPosImage));

BYTE m = 0x01;
for (int row = 0; row < height; row++) {
BYTE* rowData = rasterData + (row * widthBytes);
BYTE nL = (BYTE)(widthBytes & 0xFF);
BYTE nH = (BYTE)((widthBytes >> 8) & 0xFF);

BYTE escStar[5] = {0x1B, 0x2A, m, nL, nH};
_printer.write((LPSTR)escStar, 5);
_printer.write((LPSTR)rowData, widthBytes);
}

delete [] rasterData;

const char setAbsPosText[] = { 0x1B, 0x24, 0xC8, 0x00 };
_printer.write((LPSTR)setAbsPosText, sizeof(setAbsPosText));

char textData[1024];
memset(textData, 0x00, sizeof(textData));
sprintf_s(textData, sizeof(textData), "%s", "Hi hello");
_printer.write(textData, strlen(textData));

_printer.write((LPSTR) "\x1B\x0C", 2);  // ESC FF

pBmp->DeleteObject();

return TRUE;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post