WINDOW API基本屏幕绘图(GDI Graphics Device Interface 图像设备接口)

原创 2013年12月05日 13:40:36
基本屏幕绘图(GDI Graphics Device Interface 图像设备接口)

DC(Device Context)设备内容
在WM_PAINT消息之外的地方获得窗口的DC
HDC GetDC(HWND hWnd) 
DC使用之后一定要释放掉,让其他应用程序可以获得
int ReleaseDC(HWND hWnd,HDC(释放DC的名称)) 成功返回1,失败返回0


画笔和画刷是GDI中所定义的图像对象,画笔是线条样式,画刷是封闭的图像内部填充样式
自定义画笔或者画刷
    HPEN  CreatePen(int 样式,int 宽度,COLORREF 颜色)//建立画笔
HBRUSH CreateHatchBrush(int 样式,COLORREF 颜色)//建立阴影画刷
HBRUSH CreateSolidBrush(COLORREF 颜色)//建立单色画刷

必须在所要绘制的DC中选用建立的画笔或者画刷,才有效果

HGDIOBJ SelectObject(HDC hdc,HGDIOBJ GDI对象)
GDI对象占用内存一旦不使用,务必删除
BOOL DeleteObject(HGDIOBJ GDI对象);


GDI对象的使用基本过程
建立->选用->删除

GDI绘制函数
MoveToEx(HDC hdc,int x,int y,当前坐标(可以为ULL));
//移动起点
//画笔
LineTo(HDC hdc,int x,int y);//绘制线
//画刷
Rectangle(HDC hdc,x1,y1,x2,y2);//绘制矩形
矩形生成椭圆
BOOL Ellipse( HDC hdc,
     int 外围矩形左上点x
    int 外围矩形左上点y
      int 外围矩形右下点x
    int 外围矩形右下点y
)

生成圆角矩形
BOOL RoundRect(HDC HDC
   int 外围矩形左上点x
    int 外围矩形左上点y
      int 外围矩形右下点x
    int 外围矩形右下点y
    int 圆角上椭圆长
    int 圆角上椭圆高
)
最后生成扇形与弧形
//扇形
BOOL Pie(HDC hdc 
int 外围矩形左上点x
    int 外围矩形左上点y
      int 外围矩形右下点x
    int 外围矩形右下点y
   int 起点x
  int  起点y  
  int 终点x
                   int  终点y
)
//弧形
BOOL Chord(HDC hdc 
int 外围矩形左上点x
    int 外围矩形左上点y
      int 外围矩形右下点x
    int 外围矩形右下点y
   int 起点x
  int  起点y  
  int 终点x
                   int  终点y
)
GDI有了点的定义POINT  有x和y两个参数


Polygon(HDC hdc,点数组指针,包含的点数)  //绘制封闭多边形



绘制位图
从文件加载位图到绘制窗口 
1.从文件中加载位图(BITMAP)对象
2.建立一个与窗口DC兼容内存DC
3.内存DC使用1所建立的位图对象
4.将内存DC的内容粘贴到窗口DC中,完成显像的操作

1.加载位图
HANDLE LoadImage(
  HINSTANCE  来源实体(位图在资源文件中可以为NULL)
  LPCTSTR   名称(包括路径)
  UINT 类型  (IMAGE_BITMAP.bmp
,IMAGE_CURSOR .cur,IMAGE_ICON .ico)
 int 加载宽度
 int 加载高度
          UINT 加载方式(LR_LOADFROMFILE从文件加载)
)
2.建立兼容DC
 HDC CreateCompatibleDC(HDC hdc)
注意:使用后也要删除
 DeleteDC(HDC DC名称)  删除内存DC 
3.内存DC选用位图对象
SelectObject()
4.贴图
BOOL BitBlt(
HDC 目的DC
int 目的DC x坐标
int 目的DC y坐标
int 贴到目的DC的宽度
int 贴到母的DC的高度
HDC 来源DC
int 来源DC x 坐标
int 来源DC y坐标
DWRD 贴图方式
)




2D游戏位图特效


透明效果 


半透明效果
半透明图色彩=前景图色彩*不透明度+背景图色彩*(1-不透明度)
1.取得位图的结构
int GetObject(HGDIOBJ GDId对象
int 结构的大小
LPVOID 结构变量
);
2,建立暂存数组
usigned char *px=new unsigned char [bm.bmHeight*bm.bmWidthBytes]
3.取得位图的位值
LONG GetBItmapBits(HBITMAP 位图
LONG 要取得的Byte数
LPVOID 储存的数组指针
)
如:
GetBitmaopBits(bitmap,bm.bmHeight*bm.bmWidthBytes,px)
4,处理颜色值
5,重设位图颜色
LONG SetBitmapBits(HBITMAP  位图 
DWORD 颜色数组大小
CONST VOID 数组指针
)
透明半透明效果
      先透明 在半透明

Windows编程之hdc和hwnd的区别

hWnd(Handle of Window,也可以这么说:h是类型描述,表示句柄;wnd是变量对象描述,表示窗口)是窗口句柄,其中包含窗口的属性。例如,窗口的大小、显示位置、父窗口。 hDC(Hand...
  • wumenglu1018
  • wumenglu1018
  • 2016年10月16日 19:27
  • 1353

使用Windows API进行GDI窗口绘图

1.概述 在Windows上绘图方式,跟美术大师绘图差不多。美术绘画,首先要具备以下工具:画板,画布,画笔,画刷。同样,Windows上也有相关的概念。绘图设备DeviceContext(DC),位图...
  • celte
  • celte
  • 2013年08月23日 23:55
  • 4408

HDC与HWND的关系

都知道,从HWND可以通过方法GetSafeHDC获得一个HDC句柄,用CDC::GetWindow方法可以获得一个CWnd指针。我就犯嘀咕了,dc和窗口两个类(对象)之间,究竟是怎么一种关系?他们是...
  • ds1130071727
  • ds1130071727
  • 2015年12月02日 19:43
  • 1094

游戏编程入门(4):绘制图形图像

接上文 游戏编程入门(3):绘制基本 GDI 图形 除了经典的矢量图形游戏之外,游戏开发人员都使用图形图像来在视觉上展示游戏的图形部分。本文将介绍如何加载和显示图形图像。 本章内容包括: 位图图像的...
  • Jurbo
  • Jurbo
  • 2017年06月27日 15:50
  • 718

Delphi GDI对象之绘制文本

基本绘图操作(Basic Drawing Operations) 现在大家已经知道Rectangle方法用来画正方形和矩形,Ellipse方法用来画圆和椭圆,MoveTo和LineTo方法则用来画线...
  • xiexuan2007
  • xiexuan2007
  • 2014年01月16日 14:35
  • 860

C++/GDI+ 学习笔记(二)——几个例子

第一个例子 Hello World! 第一个最经典的例子当然是Hello World了:) TAG: GDIPlus      1.     第一个例子——“Hello ...
  • hireboy
  • hireboy
  • 2013年05月29日 16:19
  • 3231

GDI+旋转图片的几种方法

1. 使用旋转矩阵 POINT imgRotateCenterPos={10,10}; //旋转中心在图片坐标(相对于图片本身) CRect rcShow(imgSho...
  • xiaohuh421
  • xiaohuh421
  • 2014年11月10日 13:17
  • 8472

TDM-GCC编译win32程序

#include //#pragma comment(lib,"user32.lib") //#pragma comment(lib,"gdi32.lib") int WINAPI WinMain(H...
  • xiuye2015
  • xiuye2015
  • 2016年03月09日 20:02
  • 855

关于IOS中变量声明方式@interface和@property的区别

最近在在示例的时候总是对于@interface和@property声明的困惑,起初的时候对这个没有怎么在意,只是一味的在@interface中放了一个,在@property中再放一个,然后再在类中@s...
  • yangzhen19900701
  • yangzhen19900701
  • 2014年11月09日 20:13
  • 4618

C#画图解决闪烁问题

导致画面闪烁的关键原因分析:       一、绘制窗口由于大小位置状态改变进行重绘操作时      绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面重新刷新一次以维持窗...
  • xuyongbeijing2008
  • xuyongbeijing2008
  • 2013年12月17日 10:12
  • 8112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOW API基本屏幕绘图(GDI Graphics Device Interface 图像设备接口)
举报原因:
原因补充:

(最多只允许输入30个字)