|
1 |
| -VERSION 1.0 CLASS |
2 |
| -BEGIN |
3 |
| - MultiUse = -1 'True |
4 |
| - Persistable = 0 'NotPersistable |
5 |
| - DataBindingBehavior = 0 'vbNone |
6 |
| - DataSourceBehavior = 0 'vbNone |
7 |
| - MTSTransactionMode = 0 'NotAnMTSObject |
8 |
| -END |
9 |
| -Attribute VB_Name = "AlphaIcon" |
10 |
| -Attribute VB_GlobalNameSpace = False |
11 |
| -Attribute VB_Creatable = True |
12 |
| -Attribute VB_PredeclaredId = False |
13 |
| -Attribute VB_Exposed = False |
14 |
| -Option Explicit |
15 |
| - |
16 |
| -Private m_Icon As GDIPBitmap |
17 |
| -Private m_IconXP As GDIPBitmap |
18 |
| - |
19 |
| -Private m_IsAlphaBitmap As Boolean |
20 |
| - |
21 |
| -Public Property Get Image() As GDIPImage |
22 |
| - Set Image = m_IconXP.Image |
23 |
| -End Property |
24 |
| - |
25 |
| -Public Function CreateFromHICON(ByVal icoHandle As Long) |
26 |
| - |
27 |
| -Dim ii As ICONINFO |
28 |
| - |
29 |
| -Dim bmData As BitmapData |
30 |
| -Dim bmBounds As gdiplus.RECTL |
31 |
| - |
32 |
| -Dim X As Long |
33 |
| -Dim Y As Long |
34 |
| - |
35 |
| - Set m_Icon = New GDIPBitmap |
36 |
| - Set m_IconXP = New GDIPBitmap |
37 |
| - |
38 |
| - If GetIconInfo(icoHandle, ii) = 0 Then |
39 |
| - Debug.Print "Error retrieving icon info!" |
40 |
| - End If |
41 |
| - |
42 |
| - m_Icon.CreateFromHBITMAP ii.hbmColor, 0 |
43 |
| - |
44 |
| - DeleteObject ii.hbmColor |
45 |
| - DeleteObject ii.hbmMask |
46 |
| - |
47 |
| - If m_Icon.Image.ImgPixelFormat = PixelFormat.Format32bppArgb Then |
48 |
| - End If |
49 |
| - |
50 |
| - |
51 |
| - 'If BITMAP.GetPixelFormatSize(m_Icon.PixelFormat) < 32 Then |
52 |
| - 'Return ico.ToBitmap |
53 |
| - 'End If |
54 |
| - |
55 |
| - bmBounds.Width = m_Icon.Image.Width |
56 |
| - bmBounds.Height = m_Icon.Image.Height |
57 |
| - |
58 |
| - bmData = m_Icon.LockBits(bmBounds, _ |
59 |
| - ImageLockModeRead, _ |
60 |
| - m_Icon.Image.ImgPixelFormat) |
61 |
| - |
62 |
| - m_IconXP.CreateFromSizeFormatData bmData.Height, _ |
63 |
| - bmData.Width, _ |
64 |
| - bmData.stride, _ |
65 |
| - Format32bppArgb, _ |
66 |
| - bmData.Scan0Ptr |
67 |
| - |
68 |
| - |
69 |
| - |
70 |
| - m_IsAlphaBitmap = False |
71 |
| - |
72 |
| - For Y = 0 To bmData.Height - 1 |
73 |
| - For X = 0 To bmData.Width - 1 |
74 |
| - |
75 |
| - Dim PixelColor As ARGB |
76 |
| - Long2ARGB m_IconXP.GetPixel(X, Y), PixelColor |
77 |
| - 'PixelColor = Color.FromArgb(Marshal.ReadInt32(bmData.Scan0, (bmData.Stride * y) + (4 * x))) |
78 |
| - If PixelColor.A > 0 And PixelColor.A < 255 Then |
79 |
| - m_IsAlphaBitmap = True |
80 |
| - Exit For |
81 |
| - End If |
82 |
| - Next |
83 |
| - If m_IsAlphaBitmap Then Exit For |
84 |
| - Next |
85 |
| - |
86 |
| - m_Icon.UnlockBits bmData |
87 |
| - |
88 |
| - If Not m_IsAlphaBitmap Then |
89 |
| - m_Icon.Dispose |
90 |
| - m_IconXP.Dispose |
91 |
| - |
92 |
| - m_IconXP.CreateFromHICON icoHandle |
93 |
| - End If |
94 |
| - |
95 |
| -End Function |
96 |
| - |
| 1 | +VERSION 1.0 CLASS |
| 2 | +BEGIN |
| 3 | + MultiUse = -1 'True |
| 4 | + Persistable = 0 'NotPersistable |
| 5 | + DataBindingBehavior = 0 'vbNone |
| 6 | + DataSourceBehavior = 0 'vbNone |
| 7 | + MTSTransactionMode = 0 'NotAnMTSObject |
| 8 | +END |
| 9 | +Attribute VB_Name = "AlphaIcon" |
| 10 | +Attribute VB_GlobalNameSpace = False |
| 11 | +Attribute VB_Creatable = True |
| 12 | +Attribute VB_PredeclaredId = False |
| 13 | +Attribute VB_Exposed = False |
| 14 | +Option Explicit |
| 15 | + |
| 16 | +Private m_Icon As GDIPBitmap |
| 17 | +Private m_IconXP As GDIPBitmap |
| 18 | + |
| 19 | +Private m_IsAlphaBitmap As Boolean |
| 20 | + |
| 21 | +Public Property Get Image() As GDIPImage |
| 22 | + Set Image = m_IconXP.Image |
| 23 | +End Property |
| 24 | + |
| 25 | +Public Function CreateFromHICON(ByVal icoHandle As Long) |
| 26 | + |
| 27 | +Dim ii As ICONINFO |
| 28 | + |
| 29 | +Dim bmData As BitmapData |
| 30 | +Dim bmBounds As gdiplus.RECTL |
| 31 | + |
| 32 | +Dim X As Long |
| 33 | +Dim Y As Long |
| 34 | + |
| 35 | + Set m_Icon = New GDIPBitmap |
| 36 | + Set m_IconXP = New GDIPBitmap |
| 37 | + |
| 38 | + If GetIconInfo(icoHandle, ii) = 0 Then |
| 39 | + Debug.Print "Error retrieving icon info!" |
| 40 | + End If |
| 41 | + |
| 42 | + m_Icon.CreateFromHBITMAP ii.hbmColor, 0 |
| 43 | + |
| 44 | + DeleteObject ii.hbmColor |
| 45 | + DeleteObject ii.hbmMask |
| 46 | + |
| 47 | + If m_Icon.Image.ImgPixelFormat = PixelFormat.Format32bppArgb Then |
| 48 | + End If |
| 49 | + |
| 50 | + |
| 51 | + 'If BITMAP.GetPixelFormatSize(m_Icon.PixelFormat) < 32 Then |
| 52 | + 'Return ico.ToBitmap |
| 53 | + 'End If |
| 54 | + |
| 55 | + bmBounds.Width = m_Icon.Image.Width |
| 56 | + bmBounds.Height = m_Icon.Image.Height |
| 57 | + |
| 58 | + bmData = m_Icon.LockBits(bmBounds, _ |
| 59 | + ImageLockModeRead, _ |
| 60 | + m_Icon.Image.ImgPixelFormat) |
| 61 | + |
| 62 | + m_IconXP.CreateFromSizeFormatData bmData.Height, _ |
| 63 | + bmData.Width, _ |
| 64 | + bmData.stride, _ |
| 65 | + Format32bppArgb, _ |
| 66 | + bmData.Scan0Ptr |
| 67 | + |
| 68 | + |
| 69 | + |
| 70 | + m_IsAlphaBitmap = False |
| 71 | + |
| 72 | + For Y = 0 To bmData.Height - 1 |
| 73 | + For X = 0 To bmData.Width - 1 |
| 74 | + |
| 75 | + Dim PixelColor As ARGB |
| 76 | + Long2ARGB m_IconXP.GetPixel(X, Y), PixelColor |
| 77 | + 'PixelColor = Color.FromArgb(Marshal.ReadInt32(bmData.Scan0, (bmData.Stride * y) + (4 * x))) |
| 78 | + If PixelColor.A > 0 And PixelColor.A < 255 Then |
| 79 | + m_IsAlphaBitmap = True |
| 80 | + Exit For |
| 81 | + End If |
| 82 | + Next |
| 83 | + If m_IsAlphaBitmap Then Exit For |
| 84 | + Next |
| 85 | + |
| 86 | + m_Icon.UnlockBits bmData |
| 87 | + |
| 88 | + If Not m_IsAlphaBitmap Then |
| 89 | + m_Icon.Dispose |
| 90 | + m_IconXP.Dispose |
| 91 | + |
| 92 | + m_IconXP.CreateFromHICON icoHandle |
| 93 | + End If |
| 94 | + |
| 95 | +End Function |
| 96 | + |
0 commit comments