打印预览中用StretchDIBits显示bmp图像但显示速度非常慢(用的是MM_TWIPS映射模式),显示一幅大约3 * 6 cm的图片耗时差不多要一秒多,但在其他地方用同样的函数显示却非常快。不只是何原因,还望高手指点!
解决方案 »
- MFC自绘Slider控件(求助)
- RichEdit 怎么用啊,标准的控件里没有啊
- byte的问题!
- 我在局域网里一台机子上,向公网机器发送数据(用UDP),它能不能收到?
- select 怎么总是返回值为0?
- 虚拟内存不足是如何引起的?SOS! SOS! SOS!
- 简单问题!我在CMainFrame中声明了一个CxView类的成员。出点错误。不知道是为什么。请看代码。
- ar << CString 的问题
- 有谁能读懂非windows操作系统下此配置文件的内容 ?急!!!
- 调用一个dll的导出函数,光引入lib为什么还不够,还要把函数再声明一次?
- pdf文件用什么程序打开?
- 再线等待。。。打印程序
LPPICTURE gpPicture;
void ShowPicture(CDC* pDC,CString m_strBRoute,int x,int y,int width,int height)
{
HANDLE hFile = CreateFile(m_strBRoute, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
_ASSERTE(INVALID_HANDLE_VALUE != hFile); // 取得文件大小
DWORD dwFileSize = GetFileSize(hFile, NULL);
_ASSERTE(-1 != dwFileSize);
LPVOID pvData = NULL;
//根据文件大小分配内存
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
_ASSERTE(NULL != hGlobal);
pvData = GlobalLock(hGlobal);
_ASSERTE(NULL != pvData);
DWORD dwBytesRead = 0;
//读取文件并存入全局内存
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
_ASSERTE(FALSE != bRead);
GlobalUnlock(hGlobal);
CloseHandle(hFile);
LPSTREAM pstm = NULL;
// 通过全局内存创建 IStream* 的指针
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm);
//通过图形文件创建IPicture 对象
if (gpPicture)
gpPicture->Release();
hr = OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release();
HDC hdc;
hdc=pDC->GetSafeHdc();
if (gpPicture)
{
// 取得图片的宽和高
long hmWidth;
long hmHeight;
gpPicture->get_Width(&hmWidth);
gpPicture->get_Height(&hmHeight);
//宽高转换为象素
int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);
RECT rc;
GetClientRect(&rc);/*取得客户区*/
gpPicture->Render(hdc, x,y, (int)height*hmWidth/hmHeight,height, 0, hmHeight, hmWidth, -hmHeight, &rc);
/*显示图片*/
}}