|
12.09.2008, 18:02
#35537098
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
|
|
|
Участник
Откуда: от верблюда
Сообщения: 298
Рейтинг:
0
/ 0
|
|
|
|
Вот мой код для прорисобки в форму
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235.
'Модуль
Public Const GdiPlusVersion As Long = 1 &
Public Const QualityModeInvalid As Long = - 1 &
Public Const QualityModeDefault As Long = 0 &
Public Const QualityModeLow As Long = 1 &
Public Const QualityModeHigh As Long = 2 &
Public Type GDIPlusStartupInput
GdiPlusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type
Public Enum szmode
StreachSZ = 1
AutoSZ = 2
End Enum
Public Enum Status 'GDI+ Status
OK = 0
GenericError = 1
InvalidParameter = 2
OutOfMemory = 3
ObjectBusy = 4
InsufficientBuffer = 5
NotImplemented = 6
Win32Error = 7
WrongState = 8
Aborted = 9
FileNotFound = 10
ValueOverflow = 11
AccessDenied = 12
UnknownImageFormat = 13
FontFamilyNotFound = 14
FontStyleNotFound = 15
NotTrueTypeFont = 16
UnsupportedGdiplusVersion = 17
GdiplusNotInitialized = 18
PropertyNotFound = 19
PropertyNotSupported = 20
ProfileNotFound = 21
End Enum
Public Enum InterpolationMode
InterpolationModeInvalid = QualityModeInvalid
InterpolationModeDefault = QualityModeDefault
InterpolationModeLowQuality = QualityModeLow
InterpolationModeHighQuality = QualityModeHigh
InterpolationModeBilinear = QualityModeHigh + 1
InterpolationModeBicubic = QualityModeHigh + 2
InterpolationModeNearestNeighbor = QualityModeHigh + 3
InterpolationModeHighQualityBilinear = QualityModeHigh + 4
InterpolationModeHighQualityBicubic = QualityModeHigh + 5
End Enum
Public Enum SmoothingMode
SmoothingModeInvalid = QualityModeInvalid
SmoothingModeDefault = QualityModeDefault
SmoothingModeHighSpeed = QualityModeLow
SmoothingModeHighQuality = QualityModeHigh
SmoothingModeNone = QualityModeHigh + 1
SmoothingModeAntiAlias8x4 = QualityModeHigh + 2
SmoothingModeAntiAlias = SmoothingModeAntiAlias8x4
'SmoothingModeAntiAlias8x8
End Enum
Public Enum PixelOffsetMode
PixelOffsetModeInvalid = QualityModeInvalid
PixelOffsetModeDefault = QualityModeDefault
PixelOffsetModeHighSpeed = QualityModeLow
PixelOffsetModeHighQuality = QualityModeHigh
PixelOffsetModeNone = QualityModeHigh + 1
PixelOffsetModeHalf = QualityModeHigh + 2
End Enum
Public Enum CompositingQualityMode
CompositingQualityInvalid = QualityModeInvalid
CompositingQualityDefault = QualityModeDefault
CompositingQualityHighSpeed = QualityModeLow
CompositingQualityHighQuality = QualityModeHigh
CompositingQualityGammaCorrected = QualityModeHigh + 1
CompositingQualityAssumeLinear = QualityModeHigh + 2
End Enum
Public Enum CompositingModeMode
CompositingModeSourceOver = 0
CompositingModeSourceCopy = 1
End Enum
Private Declare Function GdiplusStartup Lib "gdiplus" _
(ByRef token As Long, ByRef lpInput As GDIPlusStartupInput, _
Optional ByRef lpOutput As Any) As Status
Private Declare Function GdiplusShutdown Lib "gdiplus" _
(ByVal token As Long) As Status
Private Declare Function GdipLoadImageFromFile Lib "gdiplus" _
(ByVal FileName As Long, ByRef Image1 As Long) As Status
Private Declare Function GdipCreateFromHDC Lib "gdiplus" _
(ByVal hdc As Long, ByRef graphics As Long) As Status
Private Declare Function GdipDeleteGraphics Lib "gdiplus" _
(ByVal graphics As Long) As Status
Private Declare Function GdipDrawImageRect Lib "gdiplus" _
(ByVal graphics As Long, ByVal Image1 As Long, _
ByVal x As Single, ByVal y As Single, ByVal Width As Single, _
ByVal Height As Single) As Status
Private Declare Function GdipGetImageDimension Lib "gdiplus" _
(ByVal Image1 As Long, ByRef Width As Single, _
ByRef Height As Single) As Status
Private Declare Function GdipDisposeImage Lib "gdiplus" _
(ByVal Image1 As Long) As Status
Private Declare Function GdipSetInterpolationMode Lib "gdiplus" _
(ByVal graphics As Long, ByVal InterpolationMode As _
InterpolationMode) As Status
Private Declare Function GdipGetInterpolationMode Lib "gdiplus" _
(ByVal graphics As Long, ByRef InterpolationMode As _
InterpolationMode) As Status
Private Declare Function GdipSetSmoothingMode Lib "gdiplus" _
(ByVal graphics As Long, ByVal SmoothingMode As _
SmoothingMode) As Status
Private Declare Function GdipGetSmoothingMode Lib "gdiplus" _
(ByVal graphics As Long, ByRef SmoothingMode As _
SmoothingMode) As Status
Private Declare Function GdipSetPixelOffsetMode Lib "gdiplus" _
(ByVal graphics As Long, ByVal PixelOffsetMode As _
PixelOffsetMode) As Status
Private Declare Function GdipGetPixelOffsetMode Lib "gdiplus" _
(ByVal graphics As Long, ByRef PixelOffsetMode As _
PixelOffsetMode) As Status
Private Declare Function GdipSetCompositingQuality Lib "gdiplus" _
(ByVal graphics As Long, ByVal CompositingQuality As _
CompositingQualityMode) As Status
Private Declare Function GdipGetCompositingQuality Lib "gdiplus" _
(ByVal graphics As Long, ByRef CompositingQuality As _
CompositingQualityMode) As Status
Private Declare Function GdipSetCompositingMode Lib "gdiplus" _
(ByVal graphics As Long, ByVal CompositingMode As _
CompositingModeMode) As Status
Private Declare Function GdipGetCompositingMode Lib "gdiplus" _
(ByVal graphics As Long, ByRef CompositingMode As _
CompositingModeMode) As Status
Public GdipToken As Long
Public GdipInitialized As Boolean
Dim ret2Status As Status
Dim lBitmap As Long
Dim lngGraphics As Long
Dim ImageWidth As Single
Dim ImageHeight As Single
Dim IW As Single
Dim IH As Single
Public szmodeL As szmode
Public Function StartUpGDIPlus(ByVal GdipVersion As Long) As Status
' Initialisieren der GDI+ Instanz
Dim GdipStartupInput As GDIPlusStartupInput
GdipStartupInput.GdiPlusVersion = GdipVersion
StartUpGDIPlus = GdiplusStartup(GdipToken, GdipStartupInput, ByVal 0 )
End Function
Public Function ShutdownGDIPlus() As Status
ShutdownGDIPlus = GdiplusShutdown(GdipToken)
End Function
Public Function Execute(ByVal lReturn As Status) As Status
Dim lCurErr As Status
If lReturn = Status.OK Then
lCurErr = Status.OK
Else
lCurErr = lReturn
End If
Execute = lCurErr
End Function
'функция для загрузки изображения.
Public Function loadIMG(ipath As String, Istile As SmoothingMode)
GdipCreateFromHDC Form1.hdc, lngGraphics
GdipSetSmoothingMode lngGraphics, Istile
GdipSetInterpolationMode lngGraphics, InterpolationModeInvalid
GdipSetPixelOffsetMode lngGraphics, PixelOffsetModeHighQuality
GdipSetCompositingQuality lngGraphics, CompositingQualityHighQuality
GdipSetCompositingMode lngGraphics, CompositingModeSourceOver
GdipLoadImageFromFile StrPtr(ipath), lBitmap
GdipGetImageDimension lBitmap, ImageWidth, ImageHeight
End Function
'функция для отрисовки.
Public Function Drawimg()
DoEvents
Dim w, h As Long
If szmodeL = StreachSZ Then
w = Form1.ScaleX(Form1.Width, 1 , 3 )
h = Form1.ScaleY(Form1.Height, 1 , 3 )
Else
w = ImageWidth
h = ImageHeight
End If
GdipDeleteGraphics lngGraphics
GdipCreateFromHDC Form1.hdc, lngGraphics
GdipDrawImageRect lngGraphics, lBitmap, 0 , 0 , w, h
GdipDeleteGraphics lngGraphics
End Function
модуль формы
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function InvalidateRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT, ByVal bErase As Long) As Long
Private Declare Function UpdateWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Sub Form_Load()
Dim retStatus As Status
GdipInitialized = False
retStatus = Execute(StartUpGDIPlus(GdiPlusVersion))
If retStatus = OK Then
GdipInitialized = True
Else
End If
szmodeL = StreachSZ
Me.Show
loadIMG "E:\undo_round_64_h.png", SmoothingModeAntiAlias8x4
Call Drawimg
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim retStatus As Status
If GdipInitialized = True Then
retStatus = Execute(ShutdownGDIPlus)
End If
End Sub
Private Sub Timer1_Timer()
Call Drawimg
End Sub
как доработать код чтобы не было мерцания???
|
|
|