Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Detecting color depth-16 color, 256 color, or 32 bit color
#13
I turned Steve's code into a useful function that I just added to my goodies library:

Code: (Select All)
DIM a(4)
a(1) = _NEWIMAGE(640, 480, 32) '  32 bit color
a(2) = _NEWIMAGE(640, 480, 256) ' 256 color
a(3) = _NEWIMAGE(640, 480, 12) '  16 color
a(4) = _NEWIMAGE(80, 25, 0) '    text (16 color)

PRINT IMG_ColorDepth(a(1)) ' 32 bit color return
PRINT IMG_ColorDepth(a(2)) ' 256 color return
PRINT IMG_ColorDepth(a(3)) ' 16 color return
PRINT IMG_ColorDepth(a(4)) ' text color return

'PRINT IMG_ColorDepth(-30) ' this line will cause the error described in the function's documentation


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

    IF i > -2 THEN EXIT FUNCTION '                                not an image, return 0
    IF _PIXELSIZE(i) = 4 THEN '                                  4 bytes per pixel?
        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
There are two ways to write error-free programs; only the third one works.
QB64 Tutorial
Reply


Messages In This Thread
RE: Detecting color depth-16 color, 256 color, or 32 bit color - by TerryRitchie - 08-16-2024, 07:22 PM



Users browsing this thread: 26 Guest(s)