Results 1 to 3 of 3

Thread: Graphics Module

  1. #1

    Thread Starter
    Good Ol' Platypus Sastraxi's Avatar
    Join Date
    Jan 2000
    Location
    Ontario, Canada
    Posts
    5,134

    Question Graphics Module

    Here's a general-purpose graphics module with many APIs that 'sister' existing ones (such as AlphaBlt and TileBlt). Part 1, Declarations:
    VB Code:
    1. Option Explicit
    2.  
    3. Public Type mLong
    4.     L As Long
    5. End Type
    6.  
    7. Public Type mRGB
    8.     R As Byte
    9.     G As Byte
    10.     B As Byte
    11.     A As Byte
    12. End Type
    13.  
    14. Public Enum TEXTDRAWPARAM
    15.     TDP_LEFT = 0
    16.     TDP_RIGHT = 1
    17.     TDP_HCENTRE = 2
    18.     TDP_TOP = 4
    19.     TDP_BOTTOM = 8
    20.     TDP_VCENTRE = 16
    21. End Enum
    22.  
    23. Public Const FW_DONTCARE = 0
    24. Public Const FW_THIN = 100
    25. Public Const FW_EXTRALIGHT = 200
    26. Public Const FW_LIGHT = 300
    27. Public Const FW_NORMAL = 400
    28. Public Const FW_MEDIUM = 500
    29. Public Const FW_SEMIBOLD = 600
    30. Public Const FW_BOLD = 700
    31. Public Const FW_EXTRABOLD = 800
    32. Public Const FW_HEAVY = 900
    33. Public Const FW_BLACK = FW_HEAVY
    34. Public Const FW_DEMIBOLD = FW_SEMIBOLD
    35. Public Const FW_REGULAR = FW_NORMAL
    36. Public Const FW_ULTRABOLD = FW_EXTRABOLD
    37. Public Const FW_ULTRALIGHT = FW_EXTRALIGHT
    38. Public Const ANSI_CHARSET = 0
    39. Public Const DEFAULT_CHARSET = 1
    40. Public Const SYMBOL_CHARSET = 2
    41. Public Const SHIFTJIS_CHARSET = 128
    42. Public Const HANGEUL_CHARSET = 129
    43. Public Const CHINESEBIG5_CHARSET = 136
    44. Public Const OEM_CHARSET = 255
    45. Public Const OUT_CHARACTER_PRECIS = 2
    46. Public Const OUT_DEFAULT_PRECIS = 0
    47. Public Const OUT_DEVICE_PRECIS = 5
    48. Public Const CLIP_DEFAULT_PRECIS = 0
    49. Public Const CLIP_CHARACTER_PRECIS = 1
    50. Public Const CLIP_STROKE_PRECIS = 2
    51. Public Const DEFAULT_QUALITY = 0
    52. Public Const DRAFT_QUALITY = 1
    53. Public Const PROOF_QUALITY = 2
    54. Public Const DEFAULT_PITCH = 0
    55. Public Const FIXED_PITCH = 1
    56. Public Const VARIABLE_PITCH = 2
    57. Public Const OPAQUE = 2
    58. Public Const TRANSPARENT = 1
    59. Public Const LOGPIXELSY = 90
    60. Public Const OBJ_BITMAP = 7
    61. Public Const DT_RIGHT = &H2
    62.  
    63. Public Const BI_RGB = 0&
    64. Public Const DIB_RGB_COLORS = 0
    65.  
    66.  
    67. Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
    68. Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    69. Public Declare Function GetDesktopWindow Lib "user32" () As Long
    70. Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    71. Public Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
    72. Public Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
    73. Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    74. Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    75. Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    76. Public Declare Function GetCurrentObject Lib "gdi32" (ByVal hdc As Long, ByVal uObjectType As Long) As Long
    77. Public Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
    78. Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
    79. Public Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
    80. Public Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
    81. Public Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
    82. Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
    83. Public Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
    84. Public Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long
    85. Public Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal H As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal I As Long, ByVal u As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
    86. Public Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
    87. Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
    88. Public Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
    89. Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
    90. Public Declare Function GetObjectAPI Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
    91. Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    92. Public Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
    93. Public Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
    94. Public Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
    95. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
    96.  
    97. Public Const DI_MASK = &H1
    98. Public Const DI_IMAGE = &H2
    99. Public Const DI_NORMAL = DI_MASK Or DI_IMAGE
    100.  
    101. Public Type SAFEARRAYBOUND
    102.     cElements As Long
    103.     lLbound As Long
    104. End Type
    105. Public Type SAFEARRAY2D
    106.     cDims As Integer
    107.     fFeatures As Integer
    108.     cbElements As Long
    109.     cLocks As Long
    110.     pvData As Long
    111.     Bounds(0 To 1) As SAFEARRAYBOUND
    112. End Type
    113. Public Type BITMAP
    114.     bmType As Long
    115.     bmWidth As Long
    116.     bmHeight As Long
    117.     bmWidthBytes As Long
    118.     bmPlanes As Integer
    119.     bmBitsPixel As Integer
    120.     bmBits As Long
    121. End Type
    122. Private Type BITMAPINFOHEADER '40 bytes
    123.     biSize As Long
    124.     biWidth As Long
    125.     biHeight As Long
    126.     biPlanes As Integer
    127.     biBitCount As Integer
    128.     biCompression As Long
    129.     biSizeImage As Long
    130.     biXPelsPerMeter As Long
    131.     biYPelsPerMeter As Long
    132.     biClrUsed As Long
    133.     biClrImportant As Long
    134. End Type
    135. Public Type BITMAPINFO
    136.     bmiHeader As BITMAPINFOHEADER
    137.     bmiColors As mRGB
    138. End Type
    139. Public Type RECT
    140.         Left As Long
    141.         Top As Long
    142.         Right As Long
    143.         Bottom As Long
    144. End Type
    145. Public Type SIZE
    146.         cx As Long
    147.         cy As Long
    148. End Type
    All contents of the above post that aren't somebody elses are mine, not the property of some media corporation.
    (Just a heads-up)

  2. #2

    Thread Starter
    Good Ol' Platypus Sastraxi's Avatar
    Join Date
    Jan 2000
    Location
    Ontario, Canada
    Posts
    5,134
    Part II, Code Part One:
    VB Code:
    1. Public Function TextBlt(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal Text As String, ByVal TextColour As Long, ByVal TextPoint As Integer, ByVal TextFace As String, ByVal dwFlags As TEXTDRAWPARAM)
    2. Dim tRect As RECT
    3. Dim Q As SIZE
    4.  
    5.     GetTextExtentPoint32 hDestDC, Text, Len(Text), Q
    6.    
    7.     With tRect
    8.         If dwFlags And TDP_RIGHT Then
    9.             .Left = X - (Q.cx + 5)
    10.             .Right = X
    11.         ElseIf dwFlags And TDP_HCENTRE Then
    12.             .Left = X - (Q.cx / 2)
    13.             .Right = X + (Q.cx / 2)
    14.         Else
    15.             .Left = X
    16.             .Right = X + (Q.cx - 1)
    17.         End If
    18.         If dwFlags And TDP_BOTTOM Then
    19.             .Top = Y - (Q.cy + 5)
    20.             .Bottom = Y
    21.         ElseIf dwFlags And TDP_VCENTRE Then
    22.             .Top = Y - (Q.cy / 2)
    23.             .Bottom = Y + (Q.cy / 2)
    24.         Else
    25.             .Top = Y
    26.             .Bottom = Y + (Q.cy - 1)
    27.         End If
    28.     End With
    29.  
    30.     SelectObject hDestDC, CreateMyFont(TextPoint, TextFace)
    31.     SetTextColor hDestDC, TextColour
    32.     DrawText hDestDC, Text, Len(Text), tRect, 0
    33.    
    34. End Function
    35. Public Function CreateMyFont(nSize As Integer, sFace As String) As Long  'FROM ALL-API.NET, MODIFIED
    36.     'Create a specified font
    37.     CreateMyFont = CreateFont(-MulDiv(nSize, GetDeviceCaps(GetDC(0), LOGPIXELSY), 72), 0, 0, 0, FW_NORMAL, False, False, False, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH, sFace)
    38. End Function
    39. Public Function CropTextBlt(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Text As String, ByVal TextColour As Long, ByVal TextPoint As Integer, ByVal TextFace As String, ByVal dwFlags As TEXTDRAWPARAM)
    40. Dim CropText As String
    41. Dim Q As SIZE
    42.  
    43.     SelectObject hDestDC, CreateMyFont(TextPoint, TextFace)
    44.     GetTextExtentPoint32 hDestDC, Text, Len(Text), Q
    45.    
    46.     CropText = Text
    47.    
    48.     Do While Q.cx > Width
    49.         Q.cx = 0: Q.cy = 0
    50.         CropText = Left$(CropText, Len(CropText) - 1)
    51.         GetTextExtentPoint32 hDestDC, CropText, Len(CropText), Q
    52.     Loop
    53.    
    54.     If CropText <> Text Then
    55.         If Len(CropText) > 3 Then
    56.             CropText = Left$(CropText, Len(CropText) - 3) & "..."
    57.         Else
    58.             If Len(CropText) = 3 Then CropText = "..."
    59.             If Len(CropText) = 2 Then CropText = ".."
    60.             If Len(CropText) = 1 Then CropText = "."
    61.         End If
    62.     End If
    63.    
    64.     TextBlt hDestDC, X, Y, CropText, TextColour, TextPoint, TextFace, dwFlags
    65.    
    66. End Function
    67. Public Function AlphaBltFast(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal hAlphaDC As Long, ByVal xSrc As Long, ByVal ySrc As Long)
    68. Dim I As Long
    69. Dim J As Long
    70.  
    71. Dim TempR As Long
    72. Dim TempG As Long
    73. Dim TempB As Long
    74.  
    75. Dim AlphaVal As mRGB
    76. Dim SrcVal As mRGB
    77. Dim DestVal As mRGB
    78.  
    79. Dim dBitmap As Long
    80. Dim dBMP As BITMAP
    81. Dim dPic() As mRGB
    82. Dim dMem As BITMAPINFO
    83.  
    84. Dim sBitmap As Long
    85. Dim sBMP As BITMAP
    86. Dim sPic() As mRGB
    87. Dim sMem As BITMAPINFO
    88.  
    89. Dim aBitmap As Long
    90. Dim aBMP As BITMAP
    91. Dim aPic() As mRGB
    92. Dim aMem As BITMAPINFO
    93.  
    94.     dBitmap = GetCurrentObject(hDestDC, OBJ_BITMAP)
    95.     sBitmap = GetCurrentObject(hSrcDC, OBJ_BITMAP)
    96.     aBitmap = GetCurrentObject(hAlphaDC, OBJ_BITMAP)
    97.  
    98.     GetObjectAPI dBitmap, Len(dBMP), dBMP
    99.     GetObjectAPI sBitmap, Len(sBMP), sBMP
    100.     GetObjectAPI aBitmap, Len(aBMP), aBMP
    101.    
    102.     With dMem.bmiHeader
    103.         .biBitCount = 32
    104.         .biCompression = BI_RGB
    105.         .biPlanes = 1
    106.         .biSize = Len(dMem.bmiHeader)
    107.         .biWidth = dBMP.bmWidth
    108.         .biHeight = dBMP.bmHeight
    109.         ReDim Preserve dPic(0 To (.biWidth * .biHeight) - 1) As mRGB
    110.     End With
    111.      
    112.     GetDIBits hDestDC, dBitmap, 0, dBMP.bmHeight, dPic(0), dMem, DIB_RGB_COLORS
    113.    
    114.     With sMem.bmiHeader
    115.         .biBitCount = 32
    116.         .biCompression = BI_RGB
    117.         .biPlanes = 1
    118.         .biSize = Len(sMem.bmiHeader)
    119.         .biWidth = sBMP.bmWidth
    120.         .biHeight = sBMP.bmHeight
    121.         ReDim Preserve sPic(0 To (.biWidth * .biHeight) - 1) As mRGB
    122.     End With
    123.    
    124.     GetDIBits hSrcDC, sBitmap, 0, sBMP.bmHeight, sPic(0), sMem, DIB_RGB_COLORS
    125.    
    126.     With aMem.bmiHeader
    127.         .biBitCount = 32
    128.         .biCompression = BI_RGB
    129.         .biPlanes = 1
    130.         .biSize = Len(aMem.bmiHeader)
    131.         .biWidth = aBMP.bmWidth
    132.         .biHeight = aBMP.bmHeight
    133.         ReDim Preserve aPic(0 To (.biWidth * .biHeight) - 1) As mRGB
    134.     End With
    135.    
    136.     GetDIBits hAlphaDC, aBitmap, 0, aBMP.bmHeight, aPic(0), aMem, DIB_RGB_COLORS
    137.    
    138.     For J = Y To Y + (nHeight - 1)
    139.         For I = X To X + (nWidth - 1)
    140.            
    141.             DestVal = dPic(Morph2D(I, dBMP.bmHeight - J, dBMP.bmWidth)) 'dColour.L = GetPixel(hDestDC, I, J)
    142.             SrcVal = sPic(Morph2D(I - X + xSrc, sBMP.bmHeight - (J - Y + ySrc), sBMP.bmWidth)) 'sColour.L = GetPixel(hSrcDC, I - x + xSrc, J - y + ySrc)
    143.             AlphaVal = aPic(Morph2D(I - X + xSrc, aBMP.bmHeight - (J - Y + ySrc), aBMP.bmWidth)) 'aColour.L = GetPixel(hAlphaDC, I - x + xSrc, J - y + ySrc)
    144.            
    145.             AlphaVal.R = 255 - AlphaVal.R
    146.             AlphaVal.G = 255 - AlphaVal.G
    147.             AlphaVal.B = 255 - AlphaVal.B
    148.            
    149.             TempR = (AlphaVal.R * CLng(SrcVal.R + 256 - DestVal.R)) / 256 + DestVal.R - AlphaVal.R
    150.             TempG = (AlphaVal.G * CLng(SrcVal.G + 256 - DestVal.G)) / 256 + DestVal.G - AlphaVal.G
    151.             TempB = (AlphaVal.B * CLng(SrcVal.B + 256 - DestVal.B)) / 256 + DestVal.B - AlphaVal.B
    152.            
    153.             With dPic(Morph2D(I, dBMP.bmHeight - J, dBMP.bmWidth))
    154.                 .R = TempR
    155.                 .G = TempG
    156.                 .B = TempB
    157.             End With
    158.            
    159.         Next I
    160.     Next J
    161.    
    162.     SetDIBits hDestDC, dBitmap, 0, dBMP.bmHeight, dPic(0), dMem, DIB_RGB_COLORS
    163.    
    164. End Function
    165.  
    166. Public Function AlphaBlt(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal hAlphaDC As Long, ByVal xSrc As Long, ByVal ySrc As Long)
    167. Dim I As Long
    168. Dim J As Long
    169.  
    170. Dim dColour As mLong
    171. Dim dRGB As mRGB
    172. Dim sColour As mLong
    173. Dim sRGB As mRGB
    174. Dim aColour As mLong
    175. Dim aRGB As mRGB
    176.  
    177. Dim TempR As Long
    178. Dim TempG As Long
    179. Dim TempB As Long
    180.  
    181.     For J = Y To Y + (nHeight - 1)
    182.         For I = X To X + (nWidth - 1)
    183.            
    184.             dColour.L = GetPixel(hDestDC, I, J)
    185.             sColour.L = GetPixel(hSrcDC, I - X + xSrc, J - Y + ySrc)
    186.             aColour.L = GetPixel(hAlphaDC, I - X + xSrc, J - Y + ySrc)
    187.            
    188.             LSet dRGB = dColour
    189.             LSet sRGB = sColour
    190.             LSet aRGB = aColour
    191.            
    192.             aRGB.R = 255 - aRGB.R
    193.             aRGB.G = 255 - aRGB.G
    194.             aRGB.B = 255 - aRGB.B
    195.            
    196.             TempR = (aRGB.R * CLng(sRGB.R + 256 - dRGB.R)) / 256 + dRGB.R - aRGB.R
    197.             TempG = (aRGB.G * CLng(sRGB.G + 256 - dRGB.G)) / 256 + dRGB.G - aRGB.G
    198.             TempB = (aRGB.B * CLng(sRGB.B + 256 - dRGB.B)) / 256 + dRGB.B - aRGB.B
    199.            
    200.             SetPixelV hDestDC, I, J, RGB(TempR, TempG, TempB)
    201.            
    202.         Next I
    203.     Next J
    204.    
    205. End Function
    206.  
    207. Public Function TileBlt(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal srcWidth As Long, ByVal srcHeight As Long, ByVal dwRop As Long)
    208. Dim I As Long
    209. Dim J As Long
    210. Dim ICut As Long
    211. Dim JCut As Long
    212.  
    213.     For J = Y To Y + (nHeight - 1) Step srcHeight
    214.         If J + srcHeight > Y + (nHeight - 1) Then
    215.             JCut = (Y + nHeight) - J
    216.         Else
    217.             JCut = srcHeight
    218.         End If
    219.         For I = X To X + (nWidth - 1) Step srcWidth
    220.             If I + srcWidth > X + (nWidth - 1) Then
    221.                 ICut = (X + nWidth) - I
    222.             Else
    223.                 ICut = srcWidth
    224.             End If
    225.             BitBlt hDestDC, I, J, ICut, JCut, hSrcDC, xSrc, ySrc, dwRop
    226.         Next I
    227.     Next J
    228.    
    229. End Function
    230.  
    231. Public Function IconBlt(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal hExeSrc As String, ByVal hIndex As Long, ByVal hSmallIcon As Boolean) As Long
    232. Dim hSmIco As Long
    233. Dim hLgIco As Long
    234.  
    235.     Call ExtractIconEx(hExeSrc, hIndex, hLgIco, hSmIco, 1)
    236.     If hSmallIcon Then
    237.         IconBlt = DrawIconEx(hDestDC, X, Y, hSmIco, 16, 16, 0, 0, DI_NORMAL)
    238.     Else
    239.         IconBlt = DrawIconEx(hDestDC, X, Y, hLgIco, 32, 32, 0, 0, DI_NORMAL)
    240.     End If
    241.     DestroyIcon hSmIco: DestroyIcon hLgIco
    242.    
    243. End Function
    All contents of the above post that aren't somebody elses are mine, not the property of some media corporation.
    (Just a heads-up)

  3. #3

    Thread Starter
    Good Ol' Platypus Sastraxi's Avatar
    Join Date
    Jan 2000
    Location
    Ontario, Canada
    Posts
    5,134
    Part III, Code Part II:
    VB Code:
    1. Public Function SmoothIconBlt(ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal hExeSrc As String, ByVal hIndex As Long, ByVal hSmallIcon As Boolean) As Long
    2. Dim hSmIco As Long
    3. Dim hLgIco As Long
    4. Dim hResult As Long
    5.  
    6. Dim hImgDC As Long
    7. Dim hMaskDC As Long
    8. Dim hTempDC As Long
    9.  
    10.     hImgDC = CreateMyDC(16, 16)
    11.     hMaskDC = CreateMyDC(16, 16)
    12.     hTempDC = CreateMyDC(16, 16)
    13.    
    14.     Call ExtractIconEx(hExeSrc, hIndex, hLgIco, hSmIco, 1)
    15.     If hSmallIcon Then
    16.         hResult = DrawIconEx(hMaskDC, 0, 0, hSmIco, 16, 16, 0, 0, DI_MASK)
    17.         hResult = DrawIconEx(hImgDC, 0, 0, hSmIco, 16, 16, 0, 0, DI_IMAGE)
    18.         SmoothMaskFast hTempDC, hMaskDC, 0, 0, 16, 16, smoothval
    19.         AlphaBltFast hDestDC, X, Y, 16, 16, hImgDC, hMaskDC, 0, 0
    20.     Else
    21.         hResult = DrawIconEx(hMaskDC, 0, 0, hLgIco, 32, 32, 0, 0, DI_MASK)
    22.         hResult = DrawIconEx(hImgDC, 0, 0, hLgIco, 32, 32, 0, 0, DI_IMAGE)
    23.         SmoothMaskFast hTempDC, hMaskDC, 0, 0, 32, 32, smoothval * 2
    24.         AlphaBltFast hDestDC, X, Y, 32, 32, hImgDC, hMaskDC, 0, 0
    25.     End If
    26.     DestroyIcon hSmIco: DestroyIcon hLgIco
    27.    
    28.     ReleaseDC frmMain.hwnd, hImgDC
    29.     ReleaseDC frmMain.hwnd, hMaskDC
    30.     ReleaseDC frmMain.hwnd, hTempDC
    31.    
    32. End Function
    33. Public Function SmoothMaskFast(ByVal hDestDC As Long, ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal hWidth As Long, ByVal hHeight As Long, ByVal hSmoothWeight As Long)
    34. Dim hInverse As Long
    35. Dim I As Long, J As Long
    36. Dim Base As Long
    37. Dim Plus As Long
    38. Dim Dot As Long
    39. Dim Q As Long
    40. Dim nDot As Long
    41. Dim nPlus As Long
    42.  
    43. Dim xBitmap As Long
    44. Dim xBMP As BITMAP
    45. Dim xPic() As mRGB
    46. Dim xMem As BITMAPINFO
    47.  
    48.     xBitmap = GetCurrentObject(hDestDC, OBJ_BITMAP)
    49.     GetObjectAPI xBitmap, Len(xBMP), xBMP
    50.     With xMem.bmiHeader
    51.         .biBitCount = 32
    52.         .biCompression = BI_RGB
    53.         .biPlanes = 1
    54.         .biSize = Len(xMem.bmiHeader)
    55.         .biWidth = xBMP.bmWidth
    56.         .biHeight = xBMP.bmHeight
    57.         ReDim Preserve xPic(0 To (.biWidth * .biHeight) - 1) As mRGB
    58.     End With
    59.     GetDIBits hDestDC, xBitmap, 0, xBMP.bmHeight, xPic(0), xMem, DIB_RGB_COLORS
    60.  
    61.     hInverse = 100 - (6 * hSmoothWeight)
    62.    
    63.     '.+.   This requires explaining. # will recieve hInverse rating, + will
    64.     '+#+   recieve hSmoothWeight rating, and . will recieve half of hSmoothWieght
    65.     '.+.   as its rating. Thus 4 * hSmoothWeight + (4 * 0.5) * hSmoothWeight, or 6 * hSmoothweight
    66.    
    67.     For J = Y To Y + (hHeight - 1)
    68.         For I = X To X + (hWidth - 1)
    69.            
    70.             Dot = 0
    71.             Q = 0
    72.             Base = 0
    73.             Plus = 0
    74.             nPlus = 0
    75.             nDot = 0
    76.            
    77.             Q = xPic(Morph2D(I, hHeight - J, hWidth)).R
    78.             Base = Mono(Q)
    79.            
    80.             If Base = 0 Then
    81.            
    82.                 If I - 1 >= X Then
    83.                     Plus = Plus + MonoA(xPic(Morph2D(I - 1, hHeight - J, hWidth)).R)
    84.                     nPlus = nPlus + 1
    85.                     If J - 1 >= Y Then
    86.                         Dot = Dot + MonoA(xPic(Morph2D(I - 1, hHeight - (J - 1), hWidth)).R)
    87.                         nDot = nDot + 1
    88.                     End If
    89.                     If J + 1 <= Y + (hHeight - 1) Then
    90.                         Dot = Dot + MonoA(xPic(Morph2D(I - 1, hHeight - (J + 1), hWidth)).R)
    91.                         nDot = nDot + 1
    92.                     End If
    93.                 End If
    94.                
    95.                 If I + 1 <= X + (hWidth - 1) Then
    96.                     Plus = Plus + MonoA(xPic(Morph2D(I + 1, hHeight - J, hWidth)).R)
    97.                     nPlus = nPlus + 1
    98.                     If J - 1 >= Y Then
    99.                         Dot = Dot + MonoA(xPic(Morph2D(I + 1, hHeight - (J - 1), hWidth)).R)
    100.                         nDot = nDot + 1
    101.                     End If
    102.                     If J + 1 <= Y + (hHeight - 1) Then
    103.                         Dot = Dot + MonoA(xPic(Morph2D(I + 1, hHeight - (J + 1), hWidth)).R)
    104.                         nDot = nDot + 1
    105.                     End If
    106.                 End If
    107.                
    108.                 If J + 1 <= Y + (hHeight - 1) Then
    109.                     Plus = Plus + MonoA(xPic(Morph2D(I, hHeight - (J + 1), hWidth)).R)
    110.                     nPlus = nPlus + 1
    111.                 End If
    112.                
    113.                 If J - 1 >= Y Then
    114.                     Plus = Plus + MonoA(xPic(Morph2D(I, hHeight - (J - 1), hWidth)).R)
    115.                     nPlus = nPlus + 1
    116.                 End If
    117.                
    118.                 Plus = Plus / nPlus
    119.                 Dot = Dot / nDot
    120.                
    121.                 Base = ((hInverse / 100) * Base) + ((hSmoothWeight * 4 / 100) * Plus) + ((hSmoothWeight * 2 / 100) * Dot)
    122.                
    123.                 With xPic(Morph2D(I, hHeight - J, hWidth))
    124.                     .R = Base
    125.                     .G = Base
    126.                     .B = Base
    127.                 End With
    128.            
    129.             End If
    130.            
    131.         Next I
    132.     Next J
    133.    
    134.     SetDIBits hDestDC, xBitmap, 0, xBMP.bmHeight, xPic(0), xMem, DIB_RGB_COLORS
    135.    
    136. End Function
    137. Public Function SmoothMask(ByVal hDestDC As Long, ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal hWidth As Long, ByVal hHeight As Long, ByVal hSmoothWeight As Long)
    138. Dim hInverse As Long
    139. Dim I As Long, J As Long
    140. Dim Base As Long
    141. Dim Plus As Long
    142. Dim Dot As Long
    143. Dim Q As Long
    144. Dim nDot As Long
    145. Dim nPlus As Long
    146.  
    147.     hInverse = 100 - (6 * hSmoothWeight)
    148.    
    149.     '.+.   This requires explaining. # will recieve hInverse rating, + will
    150.     '+#+   recieve hSmoothWeight rating, and . will recieve half of hSmoothWieght
    151.     '.+.   as its rating. Thus 4 * hSmoothWeight + (4 * 0.5) * hSmoothWeight, or 6 * hSmoothweight
    152.    
    153.     For J = Y To Y + (hHeight - 1)
    154.         For I = X To X + (hWidth - 1)
    155.            
    156.             Dot = 0
    157.             Q = 0
    158.             Base = 0
    159.             Plus = 0
    160.             nPlus = 0
    161.             nDot = 0
    162.            
    163.             Q = GetPixel(hDestDC, I, J)
    164.             Base = Mono(Q)
    165.            
    166.             If Base = 0 Then
    167.            
    168.                 Q = GetPixel(hdc, I - 1, J)
    169.                 If Q <> -1 Then
    170.                     Plus = Plus + Mono(Q)
    171.                     nPlus = nPlus + 1
    172.                 End If
    173.                 Q = GetPixel(hdc, I + 1, J)
    174.                 If Q <> -1 Then
    175.                     Plus = Plus + Mono(Q)
    176.                     nPlus = nPlus + 1
    177.                 End If
    178.                 Q = GetPixel(hdc, I, J - 1)
    179.                 If Q <> -1 Then
    180.                     Plus = Plus + Mono(Q)
    181.                     nPlus = nPlus + 1
    182.                 End If
    183.                 Q = GetPixel(hdc, I, J + 1)
    184.                 If Q <> -1 Then
    185.                     Plus = Plus + Mono(Q)
    186.                     nPlus = nPlus + 1
    187.                 End If
    188.                 Plus = Plus / nPlus
    189.            
    190.                 Q = GetPixel(hdc, I - 1, J - 1)
    191.                 If Q <> -1 Then
    192.                     Dot = Dot + Mono(Q)
    193.                     nDot = nDot + 1
    194.                 End If
    195.                 Q = GetPixel(hdc, I + 1, J - 1)
    196.                 If Q <> -1 Then
    197.                     Dot = Dot + Mono(Q)
    198.                     nDot = nDot + 1
    199.                 End If
    200.                 Q = GetPixel(hdc, I - 1, J + 1)
    201.                 If Q <> -1 Then
    202.                     Dot = Dot + Mono(Q)
    203.                     nDot = nDot + 1
    204.                 End If
    205.                 Q = GetPixel(hdc, I + 1, J + 1)
    206.                 If Q <> -1 Then
    207.                     Dot = Dot + Mono(Q)
    208.                     nDot = nDot + 1
    209.                 End If
    210.                 Dot = Dot / nDot
    211.            
    212.                 Base = ((hInverse / 100) * Base) + ((hSmoothWeight * 4 / 100) * Plus) + ((hSmoothWeight * 2 / 100) * Dot)
    213.                 SetPixelV hDestDC, I, J, RGB(Base, Base, Base)
    214.            
    215.             End If
    216.            
    217.         Next I
    218.     Next J
    219.    
    220. End Function
    221. Public Function Mono(Valu As Long) As Long
    222.     If Valu = 0 Then Mono = 0 Else Mono = 255
    223. End Function
    224. Public Function MonoA(Valu As Byte) As Long
    225.     If Valu = 0 Then MonoA = 0 Else MonoA = 255
    226. End Function
    227. Public Function CreateMyDC(Width As Long, Height As Long, Optional hCompatDC As Long) As Long
    228. Dim iCompatDC As Long
    229. Dim iDC As Long
    230.  
    231. If IsMissing(hCompatDC) Then
    232.     iCompatDC = GetDC(GetDesktopWindow)
    233. Else
    234.     iCompatDC = hCompatDC
    235. End If
    236.  
    237. iDC = CreateCompatibleDC(iCompatDC)
    238. DeleteObject SelectObject(iDC, CreateCompatibleBitmap(iCompatDC, Width, Height))
    239.  
    240. CreateMyDC = iDC
    241.  
    242. End Function
    243.  
    244. Public Function DestroyDC(lngDC As Long) As Boolean
    245.     ReleaseDC frmMain.hwnd, lngDC
    246. End Function
    247. Public Function Morph2D(X As Long, Y As Long, NumRow As Long) As Long
    248.     Morph2D = (Y - 1) * NumRow + X
    249. End Function
    All contents of the above post that aren't somebody elses are mine, not the property of some media corporation.
    (Just a heads-up)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width