API繪畫入門教程 GDI及GDI+ 使用入門教程 GDI實戰篇

  勇芳 2018-6-4 6086

畫畫之前要先做準備工作,見上一篇說明

設置線,就是創建個畫筆,代表畫框線的東西

{這里是準備工作代碼} ======= 后面全部需要,以后就不再寫了

  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,真的很多很多,以上介紹的最常用的。


因國家互聯網安全管理要求,關閉回帖功能。大家需要留言,請使用【勇芳軟件客服】即時聯系勇芳點此打開->>勇芳軟件客服
返回
聯系勇芳
一个人看的www视频播放中文_2012中文字幕电影_亚洲国产成人高清在线观看_中文字幕天堂最新版在线网