C技巧(使用内存DC加载并显示JPG图片)
在VC6上显示JPG图片,用内存DC缓存的方法刷新,但是怎么也刷不出来。我花了一下午才发现(没办法,GDI很少用。用IPicture::Render函数映射DC时,如果DC是内存DC,必须先为CBitmap选择Object。没有位图就无法绘制内存DC!
另外,IPicture是一个COM库,需要注意初始化COM,在
CMYApp::InitInstance()中使用了CoInitialize(NULL);
cmy app::exit instance()中使用了coun initialize();
向DC显示JPG图像的功能如下所示。它来自互联网。考试整理出来后,还可以显示第一张GIF图片的镜头,这里不用。
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。 * * Calledby:
参数:[CDC * PDC]-DC
:[cstringstrpath]-要显示的图片的路径,建议完整路径
:[int X]-显示在DC上的X位置
:[int Y]-显示在DC上的Y位置
: [bool原始大小]-是否按图片的原始大小显示,True将按DC大小缩放
return:bool-是否成功
作者
CFileStatus f status;
CFile文件;
长CB;
//打开文件并检查其有效性
if (file.open (strpath,cfile::modem)&
file . get status(strpath,fstatus)&
(CB = fstatus . m _ =-1))
{
h global h global = global alloc(GMEM _可移动,CB);
LP void pvData = NULL;
if (hGlobal!= NULL)
{
pvData = global lock(h global);
if (pvData!= NULL)
{
文件。ReadHuge(pvData,CB);
global unlock(h global);
createstreamongglobal(h global,TRUE,& pStm);
}
}
}
else
{
返回false
}
/打开文件并结束
//显示JPEG图片
IPicture * pPic;
//从文件流中加载图片
if(成功(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(lpvoid *) & ppic))
{
if(原始大小)//显示图片的原始大小
{
longnwidth = 0,n height = 0;//宽度和高度,MM_HIMETRIC模式,单位为0.01MM
pPic-> get _ Width(& nWidth);//width
ppic-> get _ height(& height);//high
CSize sz( nWidth,n height);
pDC-> HIMETRICtoDP(& SZ);//MM _ HIMETRIC模式的转换单位为MM_TEXT像素单位
ppic-> render (PDC-> M _ HDC,0,0,sz.cx,sz.cy,
0,nheight,nwidth,-nheight,null);
}
else
{
OLE _ XSIZE _ HIMETRIC hm width;
OLE _ YSIZE _ HIMETRIC hm height;
pPic-> get _ Width(& hm Width);
pPic-> get _ Height(& hm Height);
//获取图像高度和宽度
double fX,fY;
fX =(double)pDC-> GetDeviceCaps(HORZRES)*(double)hm width/
((double)pDC-> GetDeviceCaps(HORZSIZE)* 100.0);
fY =(double)pDC-> GetDeviceCaps(VERTRES)*(double)hm height/
((double)pDC-> GetDeviceCaps(VERTSIZE)* 100.0);
//使用render函数显示图像
//如果(失败则按图片原尺寸显示
(ppic-> render(* PDC,x,y,(dword) FX,(dword) fy,0,hm height,hm width,-hm height。
返回false
}
}
if(pStm)pStm-> Release();//释放IStream指针
if(pPic)pPic-> Release();//释放IPicture指针
}
else
{
return false;
}
返回true
}
0条评论