总结GDI+使用方法

说明:开发中难免会用到GDI和GDI+,用的时候都是到处找代码看资料,即使以前做过隔断时间又忘记了,干脆总结下以后也方便。

一、GDI+在程序中的引用

1、stdafx.h

// 引用GDI+
#include <GdiPlus.h>
using namespace Gdiplus;

//该函数用来加载资源中的各种格式的图片(我写到这里也可以放到自己的类中)

BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & pImg);

1.1.staafx.cpp

/************************************************************************\
* 函数说明:加载指定格式的图片
* 参数说明  nID:资源ID, sTr:图片格式 pImg:Imag变量
* 返 回 值:成功(TRUE)与失败(TRUE)
* 注意事项:无
* 编辑日期:2014-08-29
* 作    者:XQ
\************************************************************************/

BOOL ImageFromIDResource( UINT nID, LPCTSTR sTR, Image * & pImg )
{
HINSTANCE hInst = AfxGetResourceHandle();  
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type  
if (!hRsrc)  
{
AfxMessageBox(_T("加载资源ID错误"));
return FALSE;
}
// load resource into memory  
DWORD len = SizeofResource(hInst, hRsrc);  
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);  
if (!lpRsrc)  
{
AfxMessageBox(_T("加载资源错误"));
return FALSE;  
}
// Allocate global memory on which to create stream  
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);  
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);  
memcpy(pmem,lpRsrc,len);  
IStream* pstm;  
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);  
// load from stream  
pImg=Gdiplus::Image::FromStream(pstm);  
// free/release stuff  
GlobalUnlock(m_hMem);  
pstm->Release();  
FreeResource(lpRsrc);  
return TRUE;  
}


2.初始化GDI+内部变量

 //一般放到程序APP头文件中(我这里封装的DLL,放到了我的窗口作为类成员变量)

ULONG_PTR m_gdiplusToken; 

//这两个一般也是放到程序APP的InitInstance()里面

Gdiplus::GdiplusStartupInput gdiplusStartupInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

//这个一般就放在程序APP的ExitInstance()函数里面

Gdiplus::GdiplusShutdown(m_gdiplusToken);

二、使用

1、加载资源

// 首先我在类中声明一个Image指针变量

Image  *m_LogoImg;

// 构造函数中初始化变量

m_LogoImg = NULL;

//OnInitDialog()中加载图片

BOOL bRe = ImageFromIDResource(IDB_PNG_LOGO, _T("PNG"), m_LogoImg);
if (!bRe)
{
AfxMessageBox(_T("加载图像失败!"));
}
2.显示图片

2.1在OnPaint()中显示(这个看情况)

// GDI+ logo
HDC hdc = GetDC()->m_hDC;
Graphics graphics(hdc);
graphics.DrawImage(m_LogoImg, 0, 5, 110, 30);
3.释放Image变量

if(m_LogoImg != NULL)
{
delete m_LogoImg;
m_LogoImg = NULL;
}

//给段GDI双缓冲的

CRect   rect;   
GetClientRect(&rect);
// Title
CDC   dcMemTitle ;   
dcMemTitle.CreateCompatibleDC(&dc);   
CBitmap   bmpBackgroundTitle;   
bmpBackgroundTitle.LoadBitmap(IDB_TITLE);   


BITMAP   bitmapTitle;   
bmpBackgroundTitle.GetBitmap(&bitmapTitle);   
CBitmap   *pbmpOldTitle=dcMemTitle.SelectObject(&bmpBackgroundTitle);   
dc.StretchBlt(0, 0, rect.Width(), 40, &dcMemTitle, 0, 0, bitmapTitle.bmWidth, bitmapTitle.bmHeight, SRCCOPY);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GDI Region是指在C#中使用GDI+(Graphics Device Interface)库创建和操作区域的一种功能。区域可以是任意形状的图形,它可以用来进行图形的裁剪、填充和碰撞检测等操作。 在C#中,可以通过不同的方法来创建区域。引用中的代码演示了如何将Region类型转换为PointF类型,而引用则展示了从一个区域中创建另一个区域的方法,通过获取区域的数据并传递给另一个区域对象来实现。最后,引用展示了如何从GraphicsPath路径对象中创建区域。 使用区域对象可以进行各种操作,例如填充区域、裁剪区域以及检测图形是否与区域相交等。这些功能可以用来实现图形的特殊效果和交互。 总之,GDI Region是C#中用于创建和操作区域的功能,可以用来处理各种图形操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [c# GDI+的region锯齿现象解决方法尝试](https://blog.csdn.net/propellant_j/article/details/80802631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C# GDI+ winform绘图知识总结](https://blog.csdn.net/m0_65636467/article/details/129152793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值