08-16-2024, 09:43 PM
(This post was last modified: 08-16-2024, 09:45 PM by TerryRitchie.)
(08-16-2024, 09:38 PM)Pete Wrote:Oh I completely understand how to implement this like you showed. The problem is the function above is a .BM library file.Code: (Select All)Dim Shared erh As Integer
i = -1
pete = IMG_ColorDepth%(i)
Print pete
handler:
erh = Err
Resume Next
Function IMG_ColorDepth% (i As Long)
'+------------------------------------------------+
'| Returns the color depth of an image passed in. |
'| |
'| i - the image handle |
'| |
'| Returns: 0 : not an image |
'| 32 : 32 bit color image |
'| 256 : 256 color image |
'| 16 : 16 color image (or text only) |
'| |
'| Note: this function will fail if an image |
'| handle value passed in is less than -1 |
'| but does not belong to an actual image. |
'+------------------------------------------------+
Dim c As Integer ' color counter
Dim p As Integer ' palette counter
On Error GoTo handler
If _PixelSize(i) = 4 Then ' 4 bytes per pixel?
If erh Then i = 0: Exit Function
IMG_ColorDepth% = 32 ' yes, 32 bit color image
Else ' no, 1 byte per pixel
p = 0 ' reset palette counter
c = 0 ' reset color counter
Do ' begin palette search
If _PaletteColor(p, i) <> &HFF000000 Then c = c + 1 ' increment color counter if color found
p = p + 1 ' increment palette counter
Loop Until p = 256 ' leave when entire palette searched
If c <= 16 Then ' 16 colors or less?
IMG_ColorDepth% = 16 ' yes, 16 color image
Else ' no, greater than 16
IMG_ColorDepth% = 256 ' 256 color image
End If
End If
End Function
So i starts in at -1, triggers the error, exits as 0.
Edit: To turn the call to handler off at some point, just place: ON ERROR GOTO 0 in the program flow.
Pete
My code would error out when:
'$INCLUDE:'.\lib\image\LIB_IMG_Contrast.BM'
'$INCLUDE:'.\lib\image\LIB_IMG_ColorDepth.BM'
The code outside of the function in the second .BM file will trigger an error. I could create an accompanying .BI file that contains the code outside. I'll experiment with that.