API绘画入门教程 GDI及GDI+ 使用入门教程 GDI实战篇

  勇芳 2018-6-4 8543

画画之前要先做准备工作,见上一篇说明

设置线,就是创建个画笔,代表画框线的东西

{这里是准备工作代码} ======= 后面全部需要,以后就不再写了

  Dim hOldPen As HGDIOBJ 
  nPen = CreatePen(样式, 宽度, 颜色) '创建新画笔
  hOldPen = SelectObject(m_Dc, nPen)    '画笔存入DC
  DeleteObject hOldPen    '销毁旧的画笔

{这里是清理工作代码} ========== 后面全部需要,以后就不再重复写了
'nPenStyle ------ Long,指定画笔样式,可以是下述常数之一
'PS_SOLID        画笔画出的是实线
'PS_DASH         画笔画出的是虚线(nWidth必须不大于1)
'PS_DOT          画笔画出的是点线(nWidth必须不大于1)
'PS_DASHDOT      画笔画出的是点划线(nWidth必须不大于1)
'PS_DASHDOTDOT   画笔画出的是点-点-划线(nWidth必须不大于1)
'PS_NULL         画笔不能画图
'PS_INSIDEFRAME  由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框时,画线宽度向内扩展。如指定的准确RGB颜色不存在,就进行抖动处理
==========FB类调用例题=========================
  Dim gg As yGDI = 句柄
  gg.Pen(宽度,颜色)

设置填充,就是创建刷子,用来填充

  Dim hOldBrush As HGDIOBJ
 1,2选1   nBrush = CreateSolidBrush(颜色)       ‘设置填充的颜色’
 2,2选1   nBrush = GetStockObject(HOLLOW_BRUSH)  ‘不想填充颜色,就用这个’
  hOldBrush = SelectObject(m_Dc,nBrush )
  DeleteObject hOldBrush

画线条

{这里是设置线条属性}
MoveToEx m_Dc,X1,Y1,null             '设置起点
LineTo m_Dc,X2,Y2                    '画到终点
==========FB类调用例题=========================
gg.Pen(2,&HFF1FE0) 
gg.DrawLine(10, 10, 70, 90)

画多条连续的线条

LineTo m_Dc,X2,Y2                    '多次设置终点

==========FB类调用例题=========================
gg.DrawPolyline (5  ,10, 10, 50, 50,50,100,150,20,100,100)

画框,画矩形,画长方形

{设置框线} 不设置,就是默认的,就是上次用过的
{设置填充} 不设置,就是默认的,就是上次用过的
Rectangle m_Dc, X , Y , (X + W) , (Y + H)  '画框API
==========FB类调用例题=========================
gg.DrawFrame(10, 10, 70, 90)

画圆角矩形

RoundRect m_Dc, X , Y , (X + W) , (Y + H) ,圆角宽度,圆角高度
==========FB类调用例题=========================
gg.DrawCircleFrame(10, 10, 70, 90, 35, 35)

画椭圆

Ellipse m_Dc, X , Y , (X + W) , (Y + H)

绘画字符

TextOut m_Dc, X , Y , StrPtr(nText),Len(nText)

描边字,轮廓字

{这里是设置线条属性}
  BeginPath(m_Dc) ';//开始轨迹
  TextOut m_Dc, X , Y , StrPtr(nText), Len(nText)
  EndPath(m_Dc) ';//结束轨迹
  StrokePath(m_Dc) ' ;  //画出轨迹
  TextOut m_Dc, X , Y , StrPtr(nText), Len(nText) '再画字

设置文字颜色和背景

  SetTextColor m_Dc, tColor
  If bColor = -1 Then
      SetBkMode m_Dc, TRANSPARENT  '不画文字的背景色,设置这个后,画上的字是透明的
  Else
      SetBkMode m_Dc, OPAQUE  '在绘制文本的背景颜色。
      SetBkColor m_Dc, bColor ‘设置字的背景色’
  End If

将指定的矩形中像素颜色翻转,就是反色

  Dim rr As rect
  SetRect @rr, x , y , (x + w) , (y + h) 
  InvertRect m_Dc, @rr

画资源里的图标

  Dim hbmp As HICON = LoadIcon(模块地址,资源名) 
  If hbmp Then
      DrawIconEx m_Dc, x , y , hbmp, w , h , Null, Null, DI_NORMAL
      DeleteObject hbmp
  End If

画资源里的图片

  Dim hbmp As HANDLE= LoadImage(模块地址,"资源里的名称", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR)
  If hbmp Then
      DrawState m_Dc,0,0,hbmp ,0,x,y,w,h,DST_BITMAP
      DeleteObject hbmp
  End If

拷贝图片

  'rop 光栅操作代码
  'BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
  'DSTINVERT:表示使目标矩形区域颜色取反。
  'MERGECOPY:表示使用布尔型的And(与)操作符将源矩形区域的颜色与特定模式组合一起。
  'MERGEPAINT:通过使用布尔型的Or(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
  'NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
  'NOTSRCERASE:使用布尔类型的Or(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
  'PATCOPY:将特定的模式拷贝到目标位图上。
  'PATPAINT:通过使用布尔Or(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用Or(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
  'PATINVERT:通过使用Xor(异或)操作符将源和目标矩形区域内的颜色合并。
  'SRCAND:通过使用And(与)操作符来将源和目标矩形区域内的颜色合并。
  'SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
  'SRCERASE:通过使用And(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
  'SRCINVERT:通过使用布尔型的Xor(异或)操作符将源和目标矩形区域的颜色合并。
  'SRCPAINT:通过使用布尔型的Or(或)操作符将源和目标矩形区域的颜色合并。
  'WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。
  DIM BbDc as hDc =GetDC(0) '获取桌面DC
  StretchBlt(m_Dc, xDest , yDest , wDest , hDest , BbDc, xSrc , ySrc , wSrc , hSrc , 光栅操作代码) ‘将桌面图拷贝到窗口’
  ReleaseDC  0,BbDc  ‘清理DC’

半透明拷贝图片

  Dim ftn As BLENDFUNCTION
  ftn.BlendOp =0       '这个参数必须也只能为AC_SRC_OVER(0x00),意思就是把源图片覆盖到目标之上.
  ftn.BlendFlags=0     '必须为0
  ftn.SourceConstantAlpha =124  '简写为SCA,指定源图片的透明度,这个值是会和源图片的Alpha通道值合并计算的.,0为完全透明,255为完全不透明
  ftn.AlphaFormat =0  '可以填两种,一种是0x00,一种是AC_SRC_ALPHA(0x01).
  DIM BbDc as hDc =GetDC(0) '获取桌面DC
  AlphaBlend (m_Dc, xDest , yDest , wDest , hDest , BbDc, xSrc , ySrc , wSrc , hSrc , ftn)
  ReleaseDC  0,BbDc  ‘清理DC’

扣色拷贝图片

  'tColor 将源位图中的RGB颜色视为透明,扣除此色
  DIM BbDc as hDc =GetDC(0) '获取桌面DC
    TransparentBlt (m_Dc, xDest , yDest , wDest , hDest , BbDc, xSrc , ySrc , wSrc , hSrc , tColor)
  ReleaseDC  0,BbDc  ‘清理DC’

像素点颜色设置与获取

SetPixel
GetPixel

更多 GDI 的API 见 MSDN,真的很多很多,以上介绍的最常用的。


因国家互联网安全管理要求,关闭回帖功能。大家需要留言,请使用【勇芳软件客服】即时联系勇芳点此打开->>勇芳软件客服
返回
联系勇芳
发新帖 搜索 反馈 回顶部