Jump to content

# 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

##### Share on other sites

Look at Auto3Lib and it's GDI+ capabilities.

EDIT:

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

Edited by Zedna

#### Share this post

##### Share on other sites

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.

## 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

×

• Wiki

• Back

• Git