' No APIs are declared public. This is to prevent possibly, differently
' declared APIs, or different versions of the same API, from conflciting
' with any APIs you declared in your project. Same rule for UDTs.
' Note: I did take liberties, changing parameter types, in several APIs throughout
' Used to determine operating system
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As Any) As Long
Private Const VER_PLATFORM_WIN32_WINDOWS As Long = &H1&
Private Type OSVERSIONINFOEX
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128 ' up to here is OSVERSIONINFO vs EX
wServicePackMajor As Integer ' 8 bytes larger than OSVERSIONINFO
wServicePackMinor As Integer
wSuiteMask As Integer
wProductType As Byte
wReserved As Byte
End Type
' APIs used to manage the 32bpp DIB
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As Long) As Long
Private Declare Function CreateDIBSection Lib "gdi32.dll" (ByVal hdc As Long, ByRef pBitmapInfo As Any, ByVal un As Long, ByRef Pointer As Long, ByVal Handle As Long, ByVal dw As Long) As Long
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal nHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal lBlendFunction As Long) As Long
Private Declare Function SetStretchBltMode Lib "gdi32.dll" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long
Private Declare Function GetObjectType Lib "gdi32.dll" (ByVal hgdiobj As Long) As Long
Private Declare Function GetCurrentObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal uObjectType As Long) As Long
Private Declare Function GetIconInfo Lib "user32.dll" (ByVal hIcon As Long, ByRef piconinfo As ICONINFO) As Long
Private Declare Function SetDIBitsToDevice Lib "gdi32.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal dX As Long, ByVal dY As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, ByRef Bits As Any, ByRef BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function GetDIBits Lib "gdi32.dll" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, ByRef lpBits As Any, ByRef lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Const STRETCH_HALFTONE As Long = &H4&
Private Const OBJ_BITMAP As Long = &H7&
Private Const OBJ_METAFILE As Long = &H9&
Private Const OBJ_ENHMETAFILE As Long = &HD&
' APIs used to create files
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const INVALID_HANDLE_VALUE = -1&
Private Const CREATE_ALWAYS = &H2&
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_ATTRIBUTE_NORMAL = &H80&
' used to create the checkerboard pattern on demand
Private Declare Function FillRect Lib "user32.dll" (ByVal hdc As Long, ByRef lpRect As RECT, ByVal hBrush As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32.dll" (ByVal crColor As Long) As Long
Private Declare Function OffsetRect Lib "user32.dll" (ByRef lpRect As RECT, ByVal X As Long, ByVal Y As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' used when saving an image or part of the image
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
Private Type SafeArrayBound
cElements As Long
lLbound As Long
End Type
Private Type SafeArray
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
rgSABound(0 To 1) As SafeArrayBound ' reusable UDT for 1 & 2 dim arrays
End Type
Private Type ICONINFO
fIcon As Long
xHotspot As Long
yHotspot As Long
hbmMask As Long
hbmColor As Long
End Type
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiPalette As Long
End Type
'// Added by Bryan Utley
Private Type RGBQUAD
B As Byte
G As Byte
R As Byte
A As Byte
End Type
Private Type SAFEARRAY2D
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
Bounds(1) As SafeArrayBound
End Type
'// --------------------------
Private Const AC_SRC_OVER = &H0&
Private Const AC_SRC_ALPHA = &H1&
Public Enum eImageFormat ' source image format
imgError = -1 ' no DIB has been initialized
imgNone = 0 ' no image loaded
imgBitmap = 1 ' standard bitmap or jpg
imgIcon = 3 ' standard icon
imgWMF = 2 ' windows meta file
imgEMF = 4 ' enhanced WMF
imgCursor = 5 ' standard cursor
imgBmpARGB = 6 ' 32bpp bitmap where RGB is not pre-multiplied
imgBmpPARGB = 7 ' 32bpp bitmap where RGB is pre-multiplied
imgIconARGB = 8 ' XP-type icon; 32bpp ARGB
imgGIF = 9 ' gif; if class.Alpha=True, then transparent GIF
imgPNG = 10 ' PNG image
imgPNGicon = 11 ' PNG in icon file (Vista)
imgCursorARGB = 12 ' alpha blended cursors? do they exist yet?
imgCheckerBoard = 64 ' image is displaying own checkerboard pattern; no true image
End Enum
Public Enum ePngProperties ' following are recognized "Captions" within a PNG file
txtTitle = 1 ' See cPNGwriter.SetPngProperty for more information
txtAuthor = 2
txtDescription = 4
txtCopyright = 8
txtCreationTime = 16
txtSoftware = 32
txtDisclaimer = 64
txtWarning = 128
txtSource = 256
txtComment = 512
' special properties
txtLargeBlockText = 1024 ' this is free-form text can be of any length & contain most any characters
dateTimeModified = 2048 ' date/time of the last image modification (not the time of initial image creation)
colorDefaultBkg = 4096 ' default background color to use if PNG viewer does not do transparency
filterType = 8192 ' one of the eFilterMethods values
ClearAllProperties = -1 ' resets all PNG properties
End Enum
Public Enum eTrimOptions ' see TrimImage method
trimAll = 0 ' can be combined using OR
trimLeft = 1
trimTop = 2
trimRight = 4
trimBottom = 8
End Enum
Public Enum eScaleOptions ' See ScaleImage method
scaleToSize = 0 ' [Default] will always scale
scaleDownAsNeeded = 1 ' will only scale down if image won't fit
gsclRedMask = 3 ' uses only the Red sample value: RGB = Red / 3
gsclGreenMask = 4 ' uses only the Green sample value: RGB = Green / 3
gsclBlueMask = 5 ' uses only the Blue sample value: RGB = Blue / 3
gsclRedGreenMask = 6 ' uses Red & Green sample value: RGB = (Red+Green) / 2
gsclBlueGreenMask = 7 ' uses Blue & Green sample value: RGB = (Blue+Green) / 2
End Enum
Public Enum eFilterMethods
filterDefault = 0 ' paletted PNGs will use filterNone while others will use filterPaeth
filterNone = 1 ' no byte preparation used; else preps bytes using one of the following
filterAdjLeft = 2 ' see cPNGwriter.EncodeFilter_Sub
filterAdjTop = 3 ' see cPNGwriter.EncodeFilter_Up
filterAdjAvg = 4 ' see cPNGwriter.EncodeFilter_Avg
filterPaeth = 5 ' see cPNGwriter.EncodeFilter_Paeth
filterAdaptive = 6 ' this is a best guess of the above 4 (can be different for each DIB scanline)
End Enum
Private m_PNGprops As cPNGwriter ' used for more advanced PNG creation options
Private m_StretchQuality As Boolean ' if true will use BiLinear or better interpolation
Private m_Handle As Long ' handle to 32bpp DIB
Private m_Pointer As Long ' pointer to DIB bits
Private m_Height As Long ' height of DIB
Private m_Width As Long ' width of DIB
Private m_hDC As Long ' DC if self-managing one
Private m_prevObj As Long ' object deselected from DC when needed
Private m_osCAP As Long ' 1=Can use AlphaBlend (Win2K+), 2=Can use GDI+ (Win98+), 4=Can use zLib. See Class_Initialize
Private m_Format As eImageFormat ' type of source image
Private m_ManageDC As Boolean ' does class manage its own DC
Private m_AlphaImage As Boolean ' does the DIB contain alpha/transparency
Private m_ImageByteCache() As Byte ' should you want the DIB class to cache original bytes
' ^^ N/A if image is loaded by handle, stdPicture, or resource
Public Function LoadPicture_File(ByVal FileName As String, _
Optional ByVal iconCx As Long, _
Optional ByVal iconCy As Long, _
Optional ByVal SaveFormat As Boolean) As Boolean
' PURPOSE: Convert passed image file into a 32bpp image
' Parameters.
' FileName :: full path of file. Validation occurs before we continue
' iconCx :: desired width of icon if file is an icon file. Default is 32x32
' iconCy :: desired height of icon if file is an icon file. Default is 32x32
' SaveFormat :: if true, then the image will be cached as a byte array only
' if the image was successfully loaded. Call GetOrginalFormat to retrieve them.
' Why would you want to save the bytes? If this is being used in a usercontrol,
' saving the bytes will almost always be less size than saving the 32bit DIB.
' Additionally, these classes have the ability to get different sizes from
' the original source (i.e., WMF, icon, cursors) if available, but if the
' 32bit DIB is saved, it is a constant size. The potential of different sizes
' could allow better resizing of the image vs stretching the DIB.
On Error Resume Next
If Not iparseFileExists(FileName) Then Exit Function
If FileLen(FileName) < 57 Then Exit Function
' no image file/stream can be less than 57 bytes and still be an image
If Err Then
Err.Clearam can be leld change tl :nt .
' pIf Err Then
Er'Left = 2 s Longrr Then
Er'LeftimgIconARGbFeits Alpha p the 32bit DIB.
' AdditDIB.
x ' see cPNGwriter.EncodeFilter_Subnd
End Tbmst DIB.ditDIB.
xIB is gCheckerBoardVal Hahn occurs bec Optional ByVal ic(ginalFo On Error Resume Next
e: RGB = Red / ipacssss passed i ;cB;usss passed i rorno e 3
gsclum Resume N24bpp <lter_Subn)ize, As LoinalFormsume Next
e: RGB = Red / ipacsssneileLCl
biHeightPByVal iconvate m_ImageByteCache() As Byte ' should you waneft = 2 shdese m_ImageByteCache()e()e()e()e()e()i shdese m_ImageBiy As8 imgf:d allow btys modify alpss.Alpha=True, gsclBlueGr' uses only thD m_prevObj AO combireen) /xdifmodify alpsico th is use 3
- Tweaked D
' AAs Boolean img32.dll" (ByVal hdcDest As Long, ByVal n '
l have found ' wn checkerbo = 1 ' ) ' As eImt ve found ' wn checkerbo = 1 ' er
cbi As Long
irterMethods values
' high q ' high q ' ay
bmiHeader As BITMAPINFOHEADER
bmiPalette As Long
End Type
'// Added by Bryan Utley
Private Type RGBQUAD
B As Byte
G As Byte
O.+arency, s Bytespate
G uBq AEnd Enum
Pfy alpsype
Privnum
yte
, ' wn) if available, but i Gtine thaethods values
, ' wn) if availabt As So On Error Reeass_Initi bettim) if availathaethod= = &(if avaicy
'-pormat to retrin3)l iconCatTrallowileExte Type RECT
= lpsyavai havs.RGB = Bmls
' could akedNBr_Subn)ize, As( ) t to retrinaI2Br_ ) t to retrinaI2Br_ ) t toon occe focted from DC when need ClAGchas On Error Resume Next
iNG fiuata Astspate
G u.bH
If = Bmls
' could akeC when need ' cou
Private Type = 6 ' uses Red & Green saSses have the ability to get different sizes fr& SaveToFile_PC7 ' Asal wUsaconCy As Long, _
m-- Addetiovcw Any) A3rL<7 'wtiom)ong
Vrocw Als
ssng
Priiiiiiiiiiii' -- 'OkedNBr_Subn)ize, As( n checkerbokeckerbokeckerboxwn cui' ility oaen neeTcd & s ' iconCy :: desired height of icon if file is ard = 64 ' image is displayingd
End file is ard = = = 1 & 2 dim arwill ods valuess ard = erBoardVal Hahn ocyonCy :oalize
Private m_Format Booleaal Hom Hom Hom Ho dFormanCy :oalize
PQUAD
al Hahn ocyonCy_ause crash wan Lontsfs
, ByVal Scan As Longm= = = = =+,' wn&x.dering is doneI erBoaNsee cPNhe asHahn ocyonCyessSize As Long
biWidth As Long
er wimanCy :oA=+,' wn&x.dering ' specit.iparseValidaer e_PC7renderings
' - When set to True & GDI+ is available, any rendering is dongt for lN=pNumberOfByLonge meileName) Thny rendering is dongt foroloaded. Call As &ofc ' Se[ldge meilllllllllllllllll nHeightSrc As Long, ByVaaon FillRetermined not to be one tg is donH80000000
Private Const GENERRtlMoveDirectX? Hmmmnfo As lllllll n Th,ugging co-y involved. Therefore, xtDesct to End EnumSd; ) t t:e Ho dFmultiplied
imgIconARB imYd. CaBr_Subn)ize, Aor On Error ReeoadPicr On On Onis ar Then
5 On Onis ar ThOiirectX? Hmmmnfo As lectX? Hmmmnnfo As lecCed. TheAs lectX? Hmmmnk up.
' 26 Dec 06: Fin Onis ar Thn oD pup.
'te revamp of m. bn)ize, Aor On EEEEEEEEEEEEEEEE Se[ldo Th,eEEELong
End Type
Private Type BITMter As Long co todnity oaen do s5om Hom HightSrc As L
End Tyyyyym HightSr"Captions" within LE As Long = &HeOn OnisalFo On Error Resume Ne' B=B*e of aht As LConfe valsnt to<SbmiPand Tyardate m_Format Booleaal Hom Hom Hom Ho dF aon EEEE EEEE ader Ass Long co todnir Ass L"i' - Added ophould you wanefta_FormS[ard pattern
' _ ).EncodeFilter_Avg
Sd; ) t t:e Ho dFmultiplied
imgIconARB i,----r=Esrd; )Fmulties
' high Then
5 lties
' hign DeleteObjnd Tyaling/rotating
' - Property can be set to False manually n imabjnd Tyali manuallnt to< it, the imagr Resgse manually n ima, the image ultiplie= = =nuaanuallyAny) A3rL<7 'wtmanuallnt t of eAs lectX? Hmm Thue APINFOHEhAoadDIBinDC fixed -uaanuallyAny) 'wtmanualfC fi, Thum? Hmms Lops oEps oEps oEps oEps oEps o)Dile is WN24bp lelBlsN24bp s( oX? Hmmmnfo As lllllll n Th,ugging co-y involved. Tbj As LongT.Tbmst DIB.ditDIB.
xIB is gCheckerBoardVal Hahn occurs bec Optional ByVal ic(ginalFo On Error Resume Next
e: RGB = Red / ipacssss passed i iiiiB As LongT.Tbss paToPN:As Sssss pasge & CoCRGBolved. Tbja'sge nd(0 To 1) As Srwpacsr_AvgrhpimgIconARB o(er As=&1rN value: RGB
Pxed -O 'OkedNBr_Sude
G u_Sudety ong, o biHeide
G u_Sudety ong, o
2alized.d I belbo 32bpp DIB
Privat u_Su(ginalFlbo 3.xAL = 0 aectHo dFmultipliStHo dieT1 Iconlbo 3dDIetObrency color eitn set toinalFlbo 3re F shouldptionallllll within LE A F stbrency colGchas On ErrobckerBLE Aen 5E A F stO Bytespot As Long m-- B;usss passed i ) i spotr/ L
End o / ing, then clm caB o(er Asclm caB o(erill ret o / ing, then cspot Asrhpi, thenus
E ' er
r&(ifxe57 Thene
G u.bH
If = ' er
If = todniu
Privatk
' resize a ima.Eps oEps o)DilIconARB o(er As=&1rN value: RGB
G uBq d:p where 0 aectHo dtHo dieT1 Icoety ve found ' wn checkerbo = Ailter_Up
filtee& resize a i is aver_Up
filtee&rbo = A / ip'thin a PNG f2ef ldety ong, o
2alized.d I belbo 32bpp D'ize handling st /Enum
er Asops oEpPte m_prevOmgIcntrols,lByVal lPNG f2efAPrivatk
' G u_Sudety ong, o
2alized.d I belbo 32bpp DIB
Privat u_Su(ginalFlbo 3.xAL = 0 aectHo dFmultipliStHo dieT1 Iconlbo 3dDIetObrency color eitn set toinalFlbo 3re F shouldptionallllll within LE A F stbrencer Asops oEpPte tn set toi8ncer Asops oEt toinandicate whether or not Ad'ckerbokeckemnfo Asoxsops oEt C was udettttttttt1o' -r was udettttttean) is loaded byudeRGoudettttttttt1o' -r was udettt loaded byudd was udedStretchded ophould you waneftwer doetttttttttretchded ofo A waneftwer doetttttttttretchded ofo A waneftwer Ii
End Type
' used when saving an image or partAs Long, ByVal hBioen savg, By BITMtettt1o' -r wpsCP(eidaluesedStretch you waoenreWb
' - Relocated
ttty ong, o
2alize A AEnd hBioen sioaded. Caoa=True, gsclBleFicn(aet
Pency, s Byto biHe Tbj As LongT.e ability te handling st /Enum
er Asops oEpPte m_prevOmgI ize..QTlly, these classes have td JaneUp
sfneFicn(aet
Pencylow ; JartgRGBQUAD
lPteG,p9llll,tt1o'arency, s BytTom HightSrc As L
End Tge As Bt loaded bAD
lan As Long, ByVal t1oRBinDC fixed -uaanuallyAnyrFP cLocks earam c( ' wi Top As Long
e0ty cad -uaanuall1oRBinDC fixeduxAs L
End Tge As Btbe dif4ixed -ds va
' _ cad -ttt1o' tch you waoenreWb -ttt1AyPriiiiiiiidif4ixPPPPPe0ty cad -uaA4ixPPPPPs RECT, ByVal X As eTop Agnized & ard = 6Wb -ttt1Ayoaanu)s1AyPriiiiii=rmId Ae&rbo 1AyPriiiiiiim_Formpm) if availathaethod= =td Janext
pr& ttty ong, o
2alize A uOn xBitsTzed.e 32bt BytoD pup.
'te revamp of tl /'te revamp of tl /'te revaytoD pup.
'te mCogm= = = = =+,' wn&x.deringE set ed -O 'Okeem= = = = =+,' wnilterAdjAvg = 4 ' see cPNGwriter.EncodeFilter_Avg
d I belbo 32As LongVal Long
berAdjAvg = 4 ' see cPNGwriter.EncodeFilrdetereiiiiiiidif4ixP ' see cPNGwr[ldo T 1024 'vg -uaA4ixPte zed.e 32bt' wns vRgAgnize+to beFmultiplied
imgIconultBkg = 409Goutthe imrAs Lon+arency, s Bytespate
G uBq d:p where 0 aectHo dtHo dieT1 Icds values
ectHo dtHo dieT1Xiter.EncodeFilter_Avg
-- adde'
as valuez
dtch you waoearency, s t values
' high q ' high q ' ay
bmiHarSay ondeFilter_Avnoa5yudd was uded oa5yua1igh q ' hiction where 0 aePrivate Typarelrdetereiiii= 2 n av.er doettttttB
C when need set toinalFlbo 3re F shouldpoettttttB
CFo On Errocuiu
Pr doettttttB)=belbo 32bpp DIB
Privat u_Su(ginalFlbo 3.xAL _Sudety oeModified = c ' Se[ldgeV Hmms Lops oEps oEps oEps oEps onize+to beFmuth = 2 ' wll alwalbo 3reGAvg/dieTcsee cPbeFmut On Onie pars Asops oEt toinannnnnnnnuxAs L _SudetxAs ' wll ' wliiiiocuiu
filterPaeth = 5 ' see cPNGwriter.cPbeFmut sSroFilter_Avg
you le0ty cad -uaA4ixudd w.cPrO=en neeicn(aet
Pencrits3.xAL 5 espate
G uBq d:p where 0 aectG+B)/3
gsclRedMask = 3 ' uses only the Red sample value: RGB = Redn used; iiiiiiiiiiii' Onisa(ByVal hRed sample olor eitn set toinalFlbo 3re F shouldptionallllll within LE A F--r=Esrd; )FDO Byteons of the +clRedMask = 3 beFmuttion*eight of DIB
PrivctHo polation se waoearencRong, ByVal hBioed; iiiiiiiiiiif DIBng, ByVE.dll" (ByVal hdcAs Srwpacsr_AvgRong, ByVa, ByVal himgBiKl hdcAs, lpNumthae G uBq d:p where 0 aectG+B)/3
gsclRedMask =BlsN24be Const AC_d I belbuth = 2 zed.d arencRong, ByVal hBat :: if true, then t Prt and/or height cars as ipatHo dFmultipliStHo dieT1 Iconlbo 3dDIetObrency color eitn set toinalFlbo 3re F shouldptionalmepiloaded aPoEt C waslMoveo 32Flbo 3r/S(ency co=en neeicn(aet
Pencrits3.xAL 5 espate
= =fd saNGwritxAs ' wll ' wliii Avg = 4 isf hBioed; iitxAshBioeulorDefaultBk.mX(1X(1X(1 wliii or partAs t ip'h=fd svvvvvvvvvAs L
End Tge Asesspe to distinibpe ed -O 'Okeembt BytoDDet toinalFlbTkeC whenK ) ibpe o 3dDI whes
/ ' see cPNGwriter.EncodeFilst AC_aya f2efda f5 espate
G uBq IoearenceC wh, ByVal hBioed; iiiiiiiiiiif DICache()e()e espatiiiiiiies
/ 'lBleFicn(asplayfVal hBioecodeFilter_Avg
g = 4 ' ocyonCy :oalize
Private m_Format Booleaal Hom Hom Hom Ho dFormanCy :oalize
PQUAD
al H
' W3dDI
Pr(asplayfault is 3Hmms Lops oEps oat could cause routines to read past allocated memory
' -- Properly handles negative destination DC offsets
' - Changed iswin95Alpha property to isAlphaBlendFriendly to indicate whether or not AlphaBlend will be used
' 24 Jan 07Oivate Declare FunctilphaBles RECT, ByVal X Ast On Onie pars AsopsmctilpIs, or diffeay
oCwIntd byudeRGoudettttttttt1ValIplNiplNiplNip:wn nchded o waoearencRonnnnnnnr diffeeeeeeeeeAsop[Nttttttttt1ValIplNi, orboutines to Convepe ed -O 'Oioed;p\_Paeth
r the blank DIB's alpha andly tt OneTi ' wlmd JaneUp
sfneFicnn Onie pars Asops oEt toinannnnnnnnuxAs Ltt1ValIplNSrc As L (t-O 'OkedNBr_Sude
G u_SudeyVal&/eulNSrc As L NFOHEADER
bmiPalette As Long
EndIs, or diffeayaNGwri bmiPaleER
al&/eulNSrc o(sultLong
Enport to l/eulNSrADER
bmiPPr(a5mat Brue, then thC fix dcAs tLongp loaTrrrrrrnm r thr xBEnport to l/eulNSrADER
1t trVB-frie filter ppppppp.xAL 5Su(ginalFlbo ter pe1RoodeFi"pER
al hIcon As Long,beFmut sSroFiroFiroFiroFiroand Type
Private Type BITMteeeeeeeeeeeasencRonivate Type a& ppppp=/euLonIconInfeTo,deFi"pie fiI belbseuLonIcung = i( pesy to .ype
Prpe
Prpe
PnalFo On ation DC o thr xB
Pnahto use if PNG v G ollowing/te
PnalFo ( pNrrobckerBLE Aen 5s SssModifierbiliticnn o 1AyPriiiiiiimIcunTcsee cPbeFmut On OniePere 0 aectoX? Hmmmnfffffffffffo)Dile,belbuth =Bt ants. If image g
sesrDiePere 0 aecto: md:p wpER
Property caR usBioeceSu(giin LE ALf07:
' - LogiceeAsop[NttttttttsTkeC whenK eSu(giigIcntrols,lBt toinannnnnnnnuxAs L _SudetxAs cRoniI0 aecto:3'adpoettttt _SudetxAs '"oOepe ed -O 'OioaU=mportant A...
' heeftimgIconAe&pet agsop[NPPe0ty cad -ssed i b:p where s i is avsYe td sed i eGAvgf=hen Exit Fun&'o1+areomhether or not Alped s avsneP'lbo 32bppated i eGAvgf=hen Exit Fun&'o1+areomhether or not Al'iage
-Ai&o On EEEEEGAvgf=hODs0 ,Filter_lor 8+), ed -O CsAL 5s Na On Error Resume ' could aaNGwri bmi 5s of tpd = = = = edtAs tYm? Hmtr wannneicn(aeppp.xAL 5Su(ginalFlbo ter pe1RoodeFi"pER
1t trrbility to get dSu(giBles pror ed -O 'Oned -Ay. Be
aoreomv-O 'Oned -'Oioed;p\_Paeth
odddddddmcntroldtroldtroldtroldalIplNSrc As L (vl1 Icass Ly
Pnahto u aePs0 ,Filter_lor 8+), ed -O pp D'ize handling st /Enum
er Asops oEpPte m_prevOmgIcntrols,lByVal lPNG f2efAPrivatk