Jump to content

convert 24bit bmp to 16bit bmp


Recommended Posts

  • Moderators

Look at Auto3Lib and it's GDI+ capabilities.

EDIT:

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)
    Else
        $sHex = StringReplace($nColor, '0x', '')
    EndIf
    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|", _
        "|f0|f1|f2|f3|f4|f5|f6|f7|","|f8|f9|fa|fb|fc|fd|fe|ff|"]
    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", _
        "B5","BD","C6","CE","D6","DE","E7","EF","F7","FF"]
    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]
            EndIf
        Next
    Next
    If $sHoldFound Then Return $sHoldFound
    Return SetError(3, 0, 0)
EndFunc

Edit:

Doh!!!

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.

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...