关闭

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

标签: C++ WINDOW API
754人阅读 评论(1) 收藏 举报
基本屏幕绘图(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 数组指针
)
透明半透明效果
      先透明 在半透明
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:80464次
    • 积分:1255
    • 等级:
    • 排名:千里之外
    • 原创:29篇
    • 转载:54篇
    • 译文:6篇
    • 评论:11条
    博客专栏