VC的JPEG图像打印。 [英] JPEG image printing from VC.

查看:196
本文介绍了VC的JPEG图像打印。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我想从VC ++程序(通过代码)打印jpeg图像。任何API都可用于

直接图像打印。可能吗?请帮我找个方法。



谢谢,

Mithun

解决方案

< blockquote>除了使用不同的设备上下文之外,这与在Window中显示它相同。通过Google,从C ++和C ++ / CLI打印时,有很多文章可以找到。


感谢理查德的建议,我已经完成了。在这里,我发布了我的工作代码。

我把我的打印机DC和绘制的图像放在DC上。





  void  CPrint_JpegDlg :: PrintJpegImage()
{
TCHAR szPrinter [_MAX_PATH];
DWORD cntChars = _MAX_PATH;
GetDefaultPrinter(szPrinter,& cntChars);

SetDefaultPrinter(L \\\\ quotinter name);

CPrintDialog printDlg(FALSE);
printDlg.GetDefaults();

CDC prtrDC;
if (!prtrDC.Attach(printDlg.GetPrinterDC()))
{
AfxMessageBox(_T( 找不到打印机!));
return ;
}
prtrDC.m_bPrinting = TRUE;

DOCINFO imageInfo;
:: ZeroMemory(& imageInfo, sizeof (DOCINFO));
imageInfo.cbSize = sizeof (DOCINFO);
imageInfo.lpszDocName = L C:\\test.jpg; // 要打印的文件名

BOOL bPrintingOK = prtrDC.StartDoc(& ;的imageinfo);

CPrintInfo oInfo;
oInfo.SetMaxPage( 1 ); // 只有一页
int nMaxWidth = prtrDC.GetDeviceCaps(HORZRES);
int nMaxHeight = prtrDC.GetDeviceCaps(VERTRES);

oInfo.m_rectDraw.SetRect( 0 0 ,nMaxWidth,nMaxHeight) ;

for (UINT page = oInfo.GetMinPage(); page< = oInfo.GetMaxPage()&& bPrintingOK; page ++)
{
prtrDC.StartPage(); // 开始新页
oInfo.m_nCurPage = page;

CBitmap位图;
if (!bitmap.Attach(:: LoadImage(:: GetModuleHandle(NULL),L C:\\test.jpg,IMAGE_BITMAP, 0 0
LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE)))
{
AfxMessageBox(_T( 加载位图时出错!));
return ;
}


BITMAP bm;
bitmap.GetBitmap(& bm);
int nWidth = bm.bmWidth;
int nHeight = bm.bmHeight;

// 创建内存设备上下文
CDC memDC;
memDC.CreateCompatibleDC(& prtrDC);
CBitmap * pBmp = memDC.SelectObject(& bitmap);

memDC.SetMapMode(prtrDC.GetMapMode());
prtrDC.SetStretchBltMode(HALFTONE);

prtrDC.StretchBlt( 0 0 ,nMaxWidth,nMaxHeight,& memDC, 0 0 ,nWidth,nHeight,SRCCOPY);
memDC.SelectObject(pBmp);
bPrintingOK =(prtrDC.EndPage()> 0 ); // 结束页
}

if (bPrintingOK)
prtrDC.EndDoc(); // 结束打印作业
else
prtrDC.AbortDoc(); // 中止作业。

SetDefaultPrinter(szPrinter);
}


Hi,

I want to print a jpeg image from my VC++ program( through code). Any API''s available for
direct image printing. Is it possible? Please help me to find a way.

Thanks,
Mithun

解决方案

This is just the same as displaying it in a Window, except you use a different device context. There are plenty of articles to be found, via Google, on printing from C++ and C++/CLI.


Thanks Richard for the suggestion, I have done it. Here I am posting mine worked code.
I took my printers DC and drawn image on that DC.


void CPrint_JpegDlg::PrintJpegImage() 
{
	TCHAR szPrinter[_MAX_PATH];
	DWORD cntChars = _MAX_PATH;
	GetDefaultPrinter(szPrinter, &cntChars);

	SetDefaultPrinter(L"\\printer name");

	CPrintDialog printDlg(FALSE);
	printDlg.GetDefaults(); 

	CDC prtrDC;
	if (!prtrDC.Attach(printDlg.GetPrinterDC()))
	{
		AfxMessageBox(_T("No printer found!"));
		return;
	} 
	prtrDC.m_bPrinting = TRUE; 

	DOCINFO imageInfo;
	::ZeroMemory (&imageInfo, sizeof (DOCINFO));
	imageInfo.cbSize = sizeof (DOCINFO);
	imageInfo.lpszDocName = L"C:\\test.jpg"; //filename to be print

	BOOL bPrintingOK = prtrDC.StartDoc(&imageInfo); 

	CPrintInfo oInfo;
	oInfo.SetMaxPage(1); // just one page 
	int nMaxWidth = prtrDC.GetDeviceCaps(HORZRES);
	int nMaxHeight = prtrDC.GetDeviceCaps(VERTRES); 

	oInfo.m_rectDraw.SetRect(0, 0, nMaxWidth, nMaxHeight); 

	for (UINT page = oInfo.GetMinPage(); page <= oInfo.GetMaxPage() && bPrintingOK; page++) 
	{
		prtrDC.StartPage(); // begin new page
		oInfo.m_nCurPage = page;

		CBitmap bitmap;
		if(!bitmap.Attach(::LoadImage( ::GetModuleHandle(NULL),  L"C:\\test.jpg", IMAGE_BITMAP, 0, 0, 
				LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE))) 
		{
			AfxMessageBox(_T("Error loading bitmap!"));
			return;
		} 

		
		BITMAP bm;
		bitmap.GetBitmap(&bm);
		int nWidth  = bm.bmWidth; 
		int nHeight = bm.bmHeight; 

		// create memory device context
		CDC memDC; 
		memDC.CreateCompatibleDC(&prtrDC);
		CBitmap *pBmp = memDC.SelectObject(&bitmap);

		memDC.SetMapMode(prtrDC.GetMapMode());
		prtrDC.SetStretchBltMode(HALFTONE);

		prtrDC.StretchBlt(0, 0, nMaxWidth, nMaxHeight, &memDC, 0, 0, nWidth, nHeight, SRCCOPY); 
		memDC.SelectObject(pBmp);
		bPrintingOK = (prtrDC.EndPage() > 0);   // end page
	} 

	if (bPrintingOK)
		prtrDC.EndDoc(); // end a print job
	else 
		prtrDC.AbortDoc();// abort job. 

	SetDefaultPrinter(szPrinter);
}


这篇关于VC的JPEG图像打印。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆