WEB开发网
开发学院软件开发VC 你有GIF的开发许可吗?PrecSubclassWindow 以及 M... 阅读

你有GIF的开发许可吗?PrecSubclassWindow 以及 MFC 中的 EOF

 2009-02-21 20:00:10 来源:WEB开发网   
核心提示: CPicture 可以在对象被销毁或者加载另一个图像时自动释放分配的全局内存,至于从 CFile 或 CArchive 加载,你有GIF的开发许可吗?PrecSubclassWindow 以及 MFC 中的 EOF(8),我并不是真的很需要它们,加载图像已经谈了很多,像视频游戏或高端的图像

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 有了很大的提高。

再见!

上一页  3 4 5 6 7 8 

Tags:GIF 开发 许可

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接