Я хочу распечатать QR -изображение (растровое карту) и текст с использованием ESCPOS.
Я использую Visual Studio 2005. Это единственная версия, которая доступна на работе.
Логика ниже - то, что у меня есть Модифицировано до сих пор. < /p>
Результат квитанции Pirnt → Введите Описание изображения здесь < /p>
Я хочу Recipt → Введите описание изображения здесь < /p>
qr iamage здесь → Введите описание изображения здесь
Это QR -изображение - растровое изображение < /p>
{
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;
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -using-mfc
Как я могу распечатать изображение на принтере Epson с помощью MFC? [закрыто] ⇐ C++
Программы на C++. Форум разработчиков
1739007065
Anonymous
Я хочу распечатать QR -изображение (растровое карту) и текст с использованием ESCPOS.
Я использую Visual Studio 2005. Это единственная версия, которая доступна на работе.
Логика ниже - то, что у меня есть Модифицировано до сих пор. < /p>
Результат квитанции Pirnt → Введите Описание изображения здесь < /p>
Я хочу Recipt → Введите описание изображения здесь < /p>
qr iamage здесь → Введите описание изображения здесь
Это QR -изображение - растровое изображение < /p>
{
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;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79416837/how-can-i-print-an-image-on-a-epson-printer-using-mfc[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия