3 创建图像接口对象
3.1 声明图像接口对象
IPicture表示图像接口,为对话框类创建一个访问权限为private的IPicture接口的指针:
IPicture* m_pPicture;
3.2 创建图像接口对象
之后,在对话框类的OnInitDialog()函数中,通过如下代码创建图像对象接口:
OleLoadPicture(
stream
, length
, TRUE
, IID_IPicture
, (LPVOID*)&m_pPicture
);
其中,OleLoadPicture()函数的作用是创建一个图像接口对象,并且使用流对象的内容来初始化这个图像接口对象。其中参数stream是在“2
创建流接口对象”中创建的流接口对象,该对象指向了内存中JPG图片;length表示从流对象中读取的字节数,即图片的大小;TRUE指定了KeepOriginalFormat的属性;IID_IPicture指定了创建的接口对象的ID;m_pPicture是创建的图像接口对象。
3.3 获取图像接口对象的属性
要通过图像接口对象显示图像,必须要获取图像接口对象的高度和宽度。
m_pPicture->get_Width(&m_width);
m_pPicture->get_Height(&m_height);
其中,m_width和m_height都是对话框类的访问权限为private的成员函数。
OLE_XSIZE_HIMETRIC m_width;
OLE_YSIZE_HIMETRIC m_height;
其中,OLE_XSIZE_HIMETRIC和OLE_YSIZE_HIMETRIC分别是IPicture接口的Width属性和Height属性的类型,其对应的C++类型为long。
最后,通过CFile::Close()关闭CFile对象。
file.Close();
4 显示图片
在对话框类的OnPaint()函数中实现图片的显示。通过IPicture接口的Render()函数实现。
CDC *dc = GetDC();
m_pPicture->Render(dc->m_hDC, 0, 0, (int)(m_width/26.45), (int)(m_height/26.45), 0, m_height, m_width, -m_height, NULL);
其中,通过GetDC()函数获取到了当前设备上下文的指针dc。IPicture::Render()函数的作用是画指定的图像。该函数的第1个参数指定了当前设备上下文;第2-3个参数分别表示当前设备上下文中的位置的横纵坐标,该位置即为显示JPG文件的起始位置;第4-5个参数表示要显示的源图像的区域;第6-7个参数指定了源图像的位移;第8-9个参数指定了源图像的扩展宽度和高度;第10个参数NULL表示当前设备上下文不是元DC。