织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>杂项技术>VC(MFC)>

关于GDI+学习笔记

jackyhwei 发布于 2011-07-12 11:13 点击:次 
将页面坐标映射到设备坐标称为“页面变换”。Graphics类提供了4种方法用于操作和检测页面变换:SetPageUnit、 GetPageUnit、SetPageScale和GetPageScale。Graphics类同时提供2个方法GetDpiX和GetDpiY,用于获取显示设备每英吋的水平点数和垂直点数。
TAG:

1.在应用程序的stdafx,h中导入库的代码:

 

  1. #define countof(x) (sizeof(x) / sizeof(x[0])) 
  2.  
  3. #include <GdiPlus.h> 
  4. using namespace Gdiplus; 
  5. #pragma comment(lib, "gdiplus.lib") 

2.在application::InitInstance()

  1. //Initialize GDI+ 
  2. GdiplusStartupInput gdiplusStartupInput; 
  3. GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL); 

3.application::ExitInstance()

  1. // release gdi+ 
  2. GdiplusShutdown(m_gdiplusToken); 

4.在对话框Static Text显示图像。

  1. Unit units; 
  2. CRect rect; 
  3. dynamic_cast<CWnd *>(
  4. GetDlgItem(IDC_STATIC_PREVIEW_SCANNER))->GetClientRect(&rect);
  5.  
  6. RectF destRect(REAL(rect.left), REAL(rect.top)
  7. ,REAL(rect.Width()),REAL(rect.Height())); 
  8. Image *image=new Image(_T("C://image//1.jpg")); 
  9.  
  10. //创建任何对象,都要先错误检测一下,然后才调用它的方法。 
  11. if(OK==image->GetLastStatus()) 
  12.  image->GetBounds(&destRect, &units); 
  13.  Graphics graphics(dynamic_cast<CWnd *>(
  14. GetDlgItem(IDC_STATIC_PREVIEW_SCANNER))->GetDC()->GetSafeHdc());
  15.  
  16.  if(OK==graphics.GetLastStatus()) 
  17.  { 
  18.   //PointF pointF(REAL(10),REAL(100)); 
  19.   graphics.DrawImage(image,destRect); 
  20.  } 
  21. delete image; 

如果要对图像操作频繁,并且要求很快。采用

  1. Bitmap bitmap(_T("C://image//1.jpg")); 
  2. Graphics graphics(dynamic_cast<CWnd *>(
  3. GetDlgItem(IDC_STATIC_PREVIEW_SCANNER))->GetDC()->GetSafeHdc()); 
  4.  
  5. if(Ok==graphics.GetLastStatus()) 
  6.    CachedBitmap cachedBitmap(&bitmap, &graphics); 
  7.    if(Ok==cachedBitmap.GetLastStatus()) 
  8.    { 
  9.      graphics.DrawCachedBitmap(&cachedBitmap,rect.left,rect.top); 
  10.    } 

5.先创建一个graphicsPath,可能是一个矢量图像。调用这个对象就可以画这个图像了。就是自己创建一种图像矢量。方便反复调用,不需要调用的时候每次都要创建。

GraphicsPath.transform()可以对图像进行一些变形。

6.GDI+和C++类接口画线

  1. HDC hdc; 
  2. PAINTSTRUCT ps; 
  3. Pen* myPen; 
  4. Graphics* myGraphics; 
  5. hdc = BeginPaint(hWnd, &ps); 
  6. myPen = new Pen(Color(255, 255, 0, 0), 3); 
  7. myGraphics = new Graphics(hdc); 
  8. myGraphics->DrawLine(myPen, 20, 10, 200, 100); 
  9. delete myGraphics; 
  10. delete myPen; 
  11. EndPaint(hWnd, &ps); 

7.在指点大小的窗口显示图像,可以自动调节图像大小,以便全部显示在窗口中。

8.请注意,页面坐标空间的原点一律位于工作区的左上角。

此外,由于度量单位为像素,因此设备坐标和页面坐标是相同的。如果您将度量单位设为像素以外的单位 (例如英吋),则设备坐标便与页面坐标不同。

  1. myGraphics.TranslateTransform(100.0f, 50.0f); 
  2. myGraphics.DrawLine(&myPen, 0, 0, 160, 80); 

将世界坐标映射到页面坐标称为“世界变换”,由Graphics对象来进行。

将页面坐标映射到设备坐标称为“页面变换”。Graphics类提供了4种方法用于操作和检测页面变换:SetPageUnit、GetPageUnit、SetPageScale和GetPageScale。Graphics类同时提供2个方法GetDpiX和GetDpiY,用于获取显示设备每英吋的水平点数和垂直点数。

(luhuillll)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201107/14704.html]
本文出处:CSDN博客 作者:luhuillll
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容