你有GIF的开发许可吗?PrecSubclassWindow 以及 MFC 中的 EOF
2009-02-21 20:00:10 来源:WEB开发网CPicture 可以在对象被销毁或者加载另一个图像时自动释放分配的全局内存。至于从 CFile 或 CArchive 加载,我并不是真的很需要它们。
加载图像已经谈了很多。为了能够显示,你还得使用另一个 GDI+ 类,Graphics——相当于老的 GDI 中设备上下文(HDC或CDC)的作用和它的一个方法,DrawImage。
BOOL CPicture::Render(CDC* pDC, CRect rc) const
{
...
Graphics graphics(pDC->m_hDC);
graphics.DrawImage(m_pImage,
rc.left, rc.top, rc.Width(), rc.Height());
}
详情请参考源代码中的 CPicture 实现细节。用 Image 代替 IPicture 使得绘制变得简单。Image::GetWidth 和 Image::GetHeight 用于获取以像素为单位的宽和高,你能用来代替从 IPicture 获得的以 HIMETRIC 单位的相关尺寸。一般来说,GDI+用于编程相当容易。以下例子展示如何旋转。
void CPicture::Rotate(RotateFlipType rft)
{
if (m_pImage) {
m_pImage->RotateFlip(rft);
}
}
以上代码将图像顺时针旋转了90度。RotateFlipType 所有可能的取值如下:
// enum types for Image::RotateFlip
//
enum RotateFlipType
{
RotateNoneFlipNone = 0,
Rotate90FlipNone = 1,
Rotate180FlipNone = 2,
Rotate270FlipNone = 3,
RotateNoneFlipX = 4,
Rotate90FlipX = 5,
Rotate180FlipX = 6,
Rotate270FlipX = 7,
RotateNoneFlipY = Rotate180FlipX,
Rotate90FlipY = Rotate270FlipX,
Rotate180FlipY = RotateNoneFlipX,
Rotate270FlipY = Rotate90FlipX,
RotateNoneFlipXY = Rotate180FlipNone,
Rotate90FlipXY = Rotate270FlipNone,
Rotate180FlipXY = RotateNoneFlipNone,
Rotate270FlipXY = Rotate90FlipNone
};
GDI+ 还有其它函数用于拉伸和裁剪图像。甚至还有 Image::GetThumbnailImage 函数用于解决关于缩略图的问题,这个我把它留着作为你的课外练习。
我鼓励你去使用 GDI+。一些程序员并不喜欢它,因为它有点慢,但是文档上已经给出了提高性能的提示。比如说,有一个CachedBitmap类用于在设备优化模式下保存位图。你可能不会将 GDI+ 用于大量的图形处理,像视频游戏或高端的图像编辑器(这些你会使用 DirectX)。但是对于日常的图形处理任务,GDI+ 比 GDI 有了很大的提高。
再见!
- ››开发Android 日历教程
- ››开发学院总结 Win 8实用技巧大全
- ››开发学院原创教程:把win8的IE10放桌面上方法(非...
- ››开发者眼中的Windows Phone和Android
- ››开发学院教你用SQL 语句最快速清空MySQL 数据表的...
- ››开发一个自己的HTML在线编辑器(一)
- ››开发一个自己的HTML在线编辑器(二)
- ››开发者在App Store上赚的钱比在Android Market上多...
- ››开发者应深入学习的10个Android开源应用项目
- ››开发移动 Web Ajax 应用
- ››开发者眼中的iPhone与Android
- ››开发者或想使用的10个Android2.2新特性
更多精彩
赞助商链接