cImgEx.cls
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:13k
源码类别:

浏览器

开发平台:

Visual Basic

  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 = "cImgEx"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Attribute VB_Ext_KEY = "SavedWithClassBuilder6" ,"Yes"
  15. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  16. '2004-09-11
  17. '可以设置背景色
  18. '可以生成stdpicture
  19. Option Explicit
  20. '==================================================
  21. '============   用于生成stdpicture  ===============
  22. '==================================================
  23. Const RC_PALETTE As Long = &H100
  24. Const SIZEPALETTE As Long = 104
  25. Const RASTERCAPS As Long = 38
  26. Private Type PALETTEENTRY
  27.     peRed As Byte
  28.     peGreen As Byte
  29.     peBlue As Byte
  30.     peFlags As Byte
  31. End Type
  32. Private Type LOGPALETTE
  33.     palVersion As Integer
  34.     palNumEntries As Integer
  35.     palPalEntry(255) As PALETTEENTRY ' Enough for 256 colors
  36. End Type
  37. Private Type GUID
  38.     Data1 As Long
  39.     Data2 As Integer
  40.     Data3 As Integer
  41.     Data4(7) As Byte
  42. End Type
  43. Private Type PicBmp
  44.     Size As Long
  45.     Type As Long
  46.     hBmp As Long
  47.     hPal As Long
  48.     Reserved As Long
  49. End Type
  50. Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As PicBmp, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
  51. 'Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
  52. 'Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  53. 'Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
  54. Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal iCapabilitiy As Long) As Long
  55. Private Declare Function GetSystemPaletteEntries Lib "gdi32" (ByVal hdc As Long, ByVal wStartIndex As Long, ByVal wNumEntries As Long, lpPaletteEntries As PALETTEENTRY) As Long
  56. Private Declare Function CreatePalette Lib "gdi32" (lpLogPalette As LOGPALETTE) As Long
  57. Private Declare Function SelectPalette Lib "gdi32" (ByVal hdc As Long, ByVal hPalette As Long, ByVal bForceBackground As Long) As Long
  58. Private Declare Function RealizePalette Lib "gdi32" (ByVal hdc As Long) As Long
  59. 'Private 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
  60. 'Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
  61. Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
  62. '================================================
  63. '================================================
  64. Private Declare Function CreateCompatibleBitmap Lib "gdi32" ( _
  65.      ByVal hdc As Long, _
  66.      ByVal nWidth As Long, _
  67.      ByVal nHeight As Long) As Long
  68. Private Declare Function CreateCompatibleDC Lib "gdi32" ( _
  69.      ByVal hdc As Long) As Long
  70. Private Declare Function SelectObject Lib "gdi32" ( _
  71.      ByVal hdc As Long, _
  72.      ByVal hObject As Long) As Long
  73. Private Declare Function DeleteDC Lib "gdi32" ( _
  74.      ByVal hdc As Long) As Long
  75. Private Declare Function DeleteObject Lib "gdi32" ( _
  76.      ByVal hObject As Long) As Long
  77.      
  78. Private 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
  79. Private Const SRCCOPY As Long = &HCC0020
  80.      
  81. Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  82. Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
  83. Private Type RECT
  84.     Left As Long
  85.     Top As Long
  86.     Right As Long
  87.     Bottom As Long
  88. End Type
  89. Private m_created As Boolean 'if created?
  90. 'local variable(s) to hold property value(s)
  91. Private mvarhBmp As Long 'local copy
  92. Private mvarhDC As Long 'local copy
  93. Private mvarWidth As Long, mvarHeight As Long
  94. Public Sub Destroy()
  95. Call DeleteObject(mvarhBmp)
  96. Call DeleteDC(mvarhDC)
  97. mvarhBmp = 0
  98. mvarhDC = 0
  99. mvarWidth = 0
  100. mvarHeight = 0
  101. m_created = False
  102. End Sub
  103. Public Property Get hdc() As Long
  104. 'used when retrieving value of a property, on the right side of an assignment.
  105. 'Syntax: Debug.Print X.hDC
  106.     hdc = mvarhDC
  107. End Property
  108. Public Property Get hBmp() As Long
  109. 'used when retrieving value of a property, on the right side of an assignment.
  110. 'Syntax: Debug.Print X.hBmp
  111.     hBmp = mvarhBmp
  112. End Property
  113. Public Sub CopyByDc(srcHdc As Long)
  114. If mvarhDC <> 0 Then
  115.     BitBlt mvarhDC, 0, 0, mvarWidth, mvarHeight, srcHdc, 0, 0, SRCCOPY
  116. End If
  117. End Sub
  118. Public Sub CopyByBmp(srcHbmp As Long)
  119. Dim tHdc As Long
  120. Dim tPreObj As Long
  121. If mvarhDC <> 0 Then
  122.     tHdc = CreateCompatibleDC(mvarhDC)
  123.     tPreObj = SelectObject(tHdc, srcHbmp)
  124.     BitBlt mvarhDC, 0, 0, mvarWidth, mvarHeight, tHdc, 0, 0, SRCCOPY
  125.     Call SelectObject(tHdc, tPreObj)
  126.     Call DeleteDC(tHdc)
  127. End If
  128. End Sub
  129. 'Public Sub Create(nWidth As Long, nHeight As Long, nDC As Long)
  130. 'If mvarhDC <> 0 Or mvarhBmp <> 0 Then Call Destroy
  131. '
  132. 'mvarWidth = nWidth: mvarHeight = nHeight
  133. 'mvarhBmp = CreateCompatibleBitmap(nDC, nWidth, nHeight)
  134. 'mvarhDC = CreateCompatibleDC(nDC)
  135. 'Call SelectObject(mvarhDC, mvarhBmp)
  136. '
  137. 'End Sub
  138. Public Sub Create(nWidth As Long, nHeight As Long, nDC As Long, Optional color As Long = 0)
  139. 'If mvarhDC <> 0 Or mvarhBmp <> 0 Then Call Destroy '
  140. Dim oBmp As Long
  141. If Not m_created Then
  142.     mvarhBmp = CreateCompatibleBitmap(nDC, nWidth, nHeight)
  143.     mvarhDC = CreateCompatibleDC(nDC)
  144.     Call SelectObject(mvarhDC, mvarhBmp)
  145. Else
  146.     mvarhBmp = CreateCompatibleBitmap(nDC, nWidth, nHeight)
  147.     oBmp = SelectObject(mvarhDC, mvarhBmp)
  148.     Call DeleteObject(oBmp)
  149. End If
  150. mvarHeight = nHeight
  151. mvarWidth = nWidth
  152. Call SetColor(color)
  153. ''If color <> 0 Then
  154. '    Dim trc As RECT
  155. '    Dim tbr As Long
  156. '
  157. '    trc.Right = nWidth '- 1
  158. '    trc.Bottom = nHeight '- 1
  159. '
  160. '    tbr = CreateSolidBrush(color)
  161. '    Call FillRect(mvarhDC, trc, tbr)
  162. ''End If
  163. m_created = True
  164. End Sub
  165. Private Sub Class_Terminate()
  166. If mvarhDC <> 0 Or mvarhBmp <> 0 Then Call Destroy
  167. End Sub
  168. Public Property Get width() As Long
  169. width = mvarWidth
  170. End Property
  171. Public Property Get height() As Long
  172. height = mvarHeight
  173. End Property
  174. Public Sub SetColor(Optional nColor As Long = 0&)
  175. Dim trc As RECT
  176. Dim tbr As Long
  177. trc.Right = mvarWidth
  178. trc.Bottom = mvarHeight
  179. tbr = CreateSolidBrush(nColor)
  180. Call FillRect(mvarhDC, trc, tbr)
  181. DeleteObject tbr
  182. End Sub
  183. '==================================================
  184. '============   用于生成stdpicture  ===============
  185. '==================================================
  186. Private Function CreateBitmapPicture(ByVal hBmp As Long, ByVal hPal As Long) As Picture
  187.     Dim r As Long, Pic As PicBmp, IPic As IPicture, IID_IDispatch As GUID
  188.     'Fill GUID info
  189.     With IID_IDispatch
  190.         .Data1 = &H20400
  191.         .Data4(0) = &HC0
  192.         .Data4(7) = &H46
  193.     End With
  194.     'Fill picture info
  195.     With Pic
  196.         .Size = Len(Pic) ' Length of structure
  197.         .Type = vbPicTypeBitmap ' Type of Picture (bitmap)
  198.         .hBmp = hBmp ' Handle to bitmap
  199.         .hPal = hPal ' Handle to palette (may be null)
  200.     End With
  201.     'Create the picture
  202.     r = OleCreatePictureIndirect(Pic, IID_IDispatch, 1, IPic)
  203.     'Debug.Print IPic.height
  204.     'Return the new picture
  205.     Set CreateBitmapPicture = IPic
  206. End Function
  207. Private Function hDCToPicture(ByVal hDCSrc As Long, ByVal LeftSrc As Long, ByVal TopSrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long) As Picture
  208.     Dim hDCMemory As Long, hBmp As Long, hBmpPrev As Long, r As Long
  209.     Dim hPal As Long, hPalPrev As Long, RasterCapsScrn As Long, HasPaletteScrn As Long
  210.     Dim PaletteSizeScrn As Long, LogPal As LOGPALETTE
  211.     'Create a compatible device context
  212.     hDCMemory = CreateCompatibleDC(hDCSrc)
  213.     'Create a compatible bitmap
  214.     hBmp = CreateCompatibleBitmap(hDCSrc, WidthSrc, HeightSrc)
  215.     'Select the compatible bitmap into our compatible device context
  216.     hBmpPrev = SelectObject(hDCMemory, hBmp)
  217.     'Raster capabilities?
  218.     RasterCapsScrn = GetDeviceCaps(hDCSrc, RASTERCAPS) ' Raster
  219.     'Does our picture use a palette?
  220.     HasPaletteScrn = RasterCapsScrn And RC_PALETTE ' Palette
  221.     'What's the size of that palette?
  222.     PaletteSizeScrn = GetDeviceCaps(hDCSrc, SIZEPALETTE) ' Size of
  223.     If HasPaletteScrn And (PaletteSizeScrn = 256) Then
  224.         'Set the palette version
  225.         LogPal.palVersion = &H300
  226.         'Number of palette entries
  227.         LogPal.palNumEntries = 256
  228.         'Retrieve the system palette entries
  229.         r = GetSystemPaletteEntries(hDCSrc, 0, 256, LogPal.palPalEntry(0))
  230.         'Create the palette
  231.         hPal = CreatePalette(LogPal)
  232.         'Select the palette
  233.         hPalPrev = SelectPalette(hDCMemory, hPal, 0)
  234.         'Realize the palette
  235.         r = RealizePalette(hDCMemory)
  236.     End If
  237.     'Copy the source image to our compatible device context
  238.     r = BitBlt(hDCMemory, 0, 0, WidthSrc, HeightSrc, hDCSrc, LeftSrc, TopSrc, vbSrcCopy)
  239.     'Restore the old bitmap
  240.     hBmp = SelectObject(hDCMemory, hBmpPrev)
  241.     If HasPaletteScrn And (PaletteSizeScrn = 256) Then
  242.         'Select the palette
  243.         hPal = SelectPalette(hDCMemory, hPalPrev, 0)
  244.     End If
  245.     'Delete our memory DC
  246.     r = DeleteDC(hDCMemory)
  247.     Set hDCToPicture = CreateBitmapPicture(hBmp, hPal)
  248. End Function
  249. Public Function ExtractImg(x&, y&, cx&, cy&) As StdPicture
  250. If mvarhDC <> 0 Then
  251.     Set ExtractImg = hDCToPicture(mvarhDC, x, y, cx, cy)
  252. End If
  253. End Function
  254. 'index,Zero-based
  255. Public Function ExtractImg2(width&, height&, index&) As StdPicture
  256. If mvarhDC <> 0 Then
  257.     Set ExtractImg2 = hDCToPicture(mvarhDC, width * index, 0, width, height)
  258. End If
  259. End Function
  260. '=======================================================
  261. '=======================================================
  262. 'Option Explicit
  263. '
  264. 'Private Declare Function CreateCompatibleBitmap Lib "gdi32" ( _
  265. '     ByVal hdc As Long, _
  266. '     ByVal nWidth As Long, _
  267. '     ByVal nHeight As Long) As Long
  268. 'Private Declare Function CreateCompatibleDC Lib "gdi32" ( _
  269. '     ByVal hdc As Long) As Long
  270. 'Private Declare Function SelectObject Lib "gdi32" ( _
  271. '     ByVal hdc As Long, _
  272. '     ByVal hObject As Long) As Long
  273. 'Private Declare Function DeleteDC Lib "gdi32" ( _
  274. '     ByVal hdc As Long) As Long
  275. 'Private Declare Function DeleteObject Lib "gdi32" ( _
  276. '     ByVal hObject As Long) As Long
  277. '
  278. 'Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
  279. '
  280. 'Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
  281. '
  282. '
  283. 'Private Type RECT
  284. '    Left As Long
  285. '    Top As Long
  286. '    Right As Long
  287. '    Bottom As Long
  288. '
  289. 'End Type
  290. '
  291. '
  292. 'Private m_created As Boolean 'if created?
  293. '
  294. '
  295. ''local variable(s) to hold property value(s)
  296. 'Private mvarhBmp As Long 'local copy
  297. 'Private mvarhDC As Long 'local copy
  298. 'Private mvarWidth As Long
  299. 'Private mvarHeight As Long
  300. '
  301. 'Public Sub Destroy()
  302. 'Call DeleteDC(mvarhDC)
  303. 'Call DeleteObject(mvarhBmp)
  304. 'mvarhBmp = 0
  305. 'mvarhDC = 0
  306. '
  307. 'mvarWidth = 0
  308. 'mvarHeight = 0
  309. 'm_created = False
  310. 'End Sub
  311. '
  312. '
  313. '
  314. 'Public Property Get hdc() As Long
  315. ''used when retrieving value of a property, on the right side of an assignment.
  316. ''Syntax: Debug.Print X.hDC
  317. '    hdc = mvarhDC
  318. 'End Property
  319. '
  320. '
  321. '
  322. 'Public Property Get hBmp() As Long
  323. ''used when retrieving value of a property, on the right side of an assignment.
  324. ''Syntax: Debug.Print X.hBmp
  325. '    hBmp = mvarhBmp
  326. 'End Property
  327. '
  328. '
  329. 'Public Property Get Width() As Long
  330. '    Width = mvarWidth
  331. 'End Property
  332. '
  333. 'Public Property Get Height() As Long
  334. '    Height = mvarHeight
  335. 'End Property
  336. '
  337. '
  338. 'Public Sub Create(nWidth As Long, nHeight As Long, nDC As Long, Optional color As Long = 0)
  339. ''If mvarhDC <> 0 Or mvarhBmp <> 0 Then Call Destroy '
  340. 'Dim oBmp As Long
  341. '
  342. 'If Not m_created Then
  343. '    mvarhBmp = CreateCompatibleBitmap(nDC, nWidth, nHeight)
  344. '    mvarhDC = CreateCompatibleDC(nDC)
  345. '    Call SelectObject(mvarhDC, mvarhBmp)
  346. 'Else
  347. '    mvarhBmp = CreateCompatibleBitmap(nDC, nWidth, nHeight)
  348. '    oBmp = SelectObject(mvarhDC, mvarhBmp)
  349. '    Call DeleteObject(oBmp)
  350. 'End If
  351. '
  352. ''If color <> 0 Then
  353. '    Dim trc As RECT
  354. '    Dim tbr As Long
  355. '
  356. '    trc.Right = nWidth '- 1
  357. '    trc.Bottom = nHeight '- 1
  358. '
  359. '    tbr = CreateSolidBrush(color)
  360. '    Call FillRect(mvarhDC, trc, tbr)
  361. ''End If
  362. '
  363. 'mvarHeight = nHeight
  364. 'mvarWidth = nWidth
  365. '
  366. 'm_created = True
  367. 'End Sub
  368. '
  369. 'Private Sub Class_Initialize()
  370. 'm_created = False
  371. 'End Sub
  372. '
  373. 'Private Sub Class_Terminate()
  374. 'If mvarhDC <> 0 Or mvarhBmp <> 0 Then Call Destroy
  375. 'End Sub
  376. '
  377. 'Public Sub SetColor(Optional nColor As Long = 0&)
  378. 'Dim trc As RECT
  379. 'Dim tbr As Long
  380. '
  381. 'trc.Right = mvarWidth
  382. 'trc.Bottom = mvarHeight
  383. '
  384. 'tbr = CreateSolidBrush(nColor)
  385. 'Call FillRect(mvarhDC, trc, tbr)
  386. '
  387. 'End Sub
  388. '
  389. '