Jump to content
Sign in to follow this  

convert 24bit bmp to 16bit bmp

Recommended Posts


hi, i was wondering if its possible to convert a 24bit bmp to a 16bit bmp wih autoit, and if it is, how..? :)

if someone has an idea , ill tak it!

thanx in advance

Share this post

Link to post
Share on other sites

Look at Auto3Lib and it's GDI+ capabilities.


Especially at Rotate.au3 and instead of $GDIP_EPGTRANSFORMATION try to use $GDIP_EPGCOLORDEPTH

Failed attempts on my part with the above unless I just got the pixel information from bmp first, rather than using PixelGetColor() and sending the data raw from that.

I've had this for a while... it's not pretty, but it seems to work... I'd rather see the correct way to do it, but patience + time is not my strong point lately

MsgBox(0, '', _24To16(0xA3D1FF))
Func _24To16($nColor)
    $nColor = String($nColor)
    Local $sHex
    If StringInStr($sHex, '0x') = 0 Then 
        $sHex = Hex($nColor, 6)
        $sHex = StringReplace($nColor, '0x', '')
    If StringLen($sHex) <> 6 Then Return SetError(1, 0, 0)
    Local $a24Bit[33] = [ "", _
        "|00|01|02|03|04|05|06|07|","|08|09|0a|0b|0c|0d|0e|0f|", _
        "|10|11|12|13|14|15|16|17|","|18|19|1a|1b|1c|1d|1e|1f|", _
        "|20|21|22|23|24|25|26|27|","|28|29|2a|2b|2c|2d|2e|2f|", _
        "|30|31|32|33|34|35|36|37|","|38|39|3a|3b|3c|3d|3e|3f|", _
        "|40|41|42|43|44|45|46|47|","|48|49|4a|4b|4c|4d|4e|4f|", _
        "|50|51|52|53|54|55|56|57|","|58|59|5a|5b|5c|5d|5e|5f|", _
        "|60|61|62|63|64|65|66|67|","|68|69|6a|6b|6c|6d|6e|6f|", _
        "|70|71|72|73|74|75|76|77|","|78|79|7a|7b|7c|7d|7e|7f|", _
        "|80|81|82|83|84|85|86|87|","|88|89|8a|8b|8c|8d|8e|8f|", _
        "|90|91|92|93|94|95|96|97|","|98|99|9a|9b|9c|9d|9e|9f|", _
        "|a0|a1|a2|a3|a4|a5|a6|a7|","|a8|a9|aa|ab|ac|ad|ae|af|", _
        "|b0|b1|b2|b3|b4|b5|b6|b7|","|b8|b9|ba|bb|bc|bd|be|bf|", _
        "|c0|c1|c2|c3|c4|c5|c6|c7|","|c8|c9|ca|cb|cc|cd|ce|cf|", _
        "|d0|d1|d2|d3|d4|d5|d6|d7|","|d8|d9|da|db|dc|dd|de|df|", _
        "|e0|e1|e2|e3|e4|e5|e6|e7|","|e8|e9|ea|eb|ec|ed|ee|ef|", _
    Local $a16Bit[33] = [ "", _
        "00","08","10","18","21","29","31","39","42","4A","52", _
        "5A","63","66","73","76","84","8C","94","9C","A5","AD", _
    Local $aColorHex = StringRegExp($sHex, ".{2}", 3)
    If IsArray($aColorHex) = 0 Then Return SetError(2, 0, 0)
    Local $sHoldFound
    For $iCC = 0 To 2
        For $xCC = 1 To 32
            If StringRegExp($a24Bit[$xCC], "(?i)\|" & $aColorHex[$iCC] & "\|") Then
                $sHoldFound &= $a16Bit[$xCC]
    If $sHoldFound Then Return $sHoldFound
    Return SetError(3, 0, 0)



I've totally misread this thread I think (I thought you meant individual pixels)... Zedna has it right... Sorry

Edited by SmOke_N

Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  


Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.