Opt("MouseCoordMode", 2) Global $iW = Int(InputBox("Simple Sketch - Configure", "Choose a size in px. (min. 32, max. 92)", "32")), $iH = $iW, $iPX = 8, $aDisplay[$iW][$iH], $aControls[$iW*2][8], $sPen = "0x000000", $aBitmap[$iW][$iH] Global $aImage[46][2] = [[2,1],[3,1],[6,1],[7,1],[10,1],[14,1],[16,1],[17,1],[18,1],[1,2],[6,2],[8,2],[11,2],[14,2],[16,2],[2,3],[3,3],[6,3],[8,3],[11,3],[14,3],[16,3], _ [4,4],[6,4],[9,4],[12,4],[14,4],[16,4],[17,4],[4,5],[6,5],[7,5],[8,5],[9,5],[12,5],[14,5],[16,5],[2,6],[3,6],[6,6],[10,6],[13,6],[14,6],[16,6],[17,6],[18,6]], $aColorControls[20][2] = [[0,0],[3,1],[6,2],[9,3],[12,4],[15,5],[18,6],[21,7],[24,8],[27,9],[0,10],[3,11],[6,12],[9,13],[12,14],[15,15],[18,16],[21,17],[24,18],[27,19]] $hWnd = GUICreate("Simple Sketch", $iW*$iPX, ($iH+(8/2))*$iPX) For $i = 0 To $iW-1 For $i2 = 0 To $iH-1 $aDisplay[$i][$i2] = GUICtrlCreateLabel("", $i*$iPX, $i2*$iPX, $iPX, $iPX) $aBitmap[$i][$i2*GUICtrlSetBkColor(-1, _Color(9))] = StringTrimLeft(_Color(9), 2) Next Next For $i = 0 To $iW*2-1 For $i2 = 0 To $iPX-1 $aControls[$i][$i2] = GUICtrlCreateLabel("", $i*($iPX/2), (($iH)*$iPX)+$i2*($iPX/2), $iPX/2, $iPX/2) GUICtrlSetBkColor(-1, 0xF0F0F0) Next Next For $i = 0 To 46-1 GUICtrlSetBkColor($aControls[$aImage[$i][0]][$aImage[$i][1]], 0) Next For $i = 0 To 10-1 For $i2 = 0 To 2 For $i3 = 0 To 2 GUICtrlSetBkColor($aControls[($iW-1)*2-$i2-$aColorControls[$i][0]][1+$i3], _Color($aColorControls[$i][1])) GUICtrlSetBkColor($aControls[($iW-1)*2-$i2-$aColorControls[$i+10][0]][($iPX/2)+$i3], _Color($aColorControls[$i+10][1])) Next Next Next $hColor = GUICtrlCreateLabel("", (($iW-1)-(27/2)-1)*$iPX - 28, ($iH+(1/2))*$iPX, 3*$iPX, 3*$iPX) GUICtrlSetBkColor(-1, 0x000000) GUISetState() While BitXOR(Sleep(1000/500), (GUIGetMsg() = -3)) If WinActive($hWnd) Then $aCInfo = GUIGetCursorInfo($hWnd) If BitAND(($aCInfo[0] > 0), ($aCInfo[1] > 0), ($aCInfo[0] < $iW*$iPX), ($aCInfo[1] < ($iH+(8/2))*$iPX), $aCInfo[2]) Then If BitAnd(($aCInfo[0] > 0), ($aCInfo[1] > 0), ($aCInfo[0] < $iW*$iPX), ($aCInfo[1] < $iH*$iPX)) Then $aBitmap[Int($aCInfo[0]/$iPX)][Int($aCInfo[1]/$iPX)] = StringTrimLeft($sPen, 2) GUICtrlSetBkColor($aDisplay[Int($aCInfo[0]/$iPX)][Int($aCInfo[1]/$iPX)], $sPen) ElseIf BitAnd(($aCInfo[0] > 0), ($aCInfo[1] > $iH*$iPX), ($aCInfo[0] < (19/2)*$iPX), ($aCInfo[1] < ($iH+(8/2))*$iPX)) Then _Save() ElseIf BitAnd(($aCInfo[0] > (($iW-1)-(27/2)-1)*$iPX), ($aCInfo[1] > ($iH+(1/2))*$iPX), ($aCInfo[0] < (($iW-1)*2-2)*$iPX), ($aCInfo[1] < ($iH+(7/2))*$iPX)) Then GUICtrlSetBkColor($hColor & StringTrimLeft(Assign("sPen", _Color($aColorControls[(9-Int(($aCInfo[0]-((($iW-1)-(27/2)-1)*$iPX))/12))+(10*($aCInfo[1] > ($iH+(4/2))*$iPX))][1])),1), $sPen) ElseIf BitAND(($aCInfo[0] > (($iW-1)-(27/2)-1)*$iPX - 28), ($aCInfo[1] > ($iH+(1/2))*$iPX), ($aCInfo[0] < (($iW-1)-(27/2)-1)*$iPX - 4), ($aCInfo[1] < ($iH+(1/2))*$iPX + 24)) Then GUICtrlSetBkColor($hColor & StringTrimLeft(Assign("sPen", InputBox("Color Input", "Choose a custom color:", "0x000000")),1),$sPen) EndIf EndIf EndIf WEnd Func _Color($iColor) Local $aColor[20] = ["000000", "1A1A1A", "333333", "4D4D4D", "666666", "808080", "999999", "B3B3B3", "CCCCCC", "FFFFFF", _ "0000FF", "000080", "00FFFF", "008080", "00FF00", "008000", "FFFF00", "808000", "FF0000", "800000"] Return "0x" & $aColor[$iColor] EndFunc Func _Save() ; By evilertoaster from http://www.autoitscript.com/forum/topic/27362-bitmap-library/ ConsoleWrite("Save" & @CRLF) Local $Width = $iW, $Height = $iH Local $c=Mod($Width,4) Local $d=Binary("") if $c=3 then $d=Binary("0x000000") if $c=2 then $d=Binary("0x0000") if $c=1 then $d=Binary("0x00") Local $Header=Binary("0x424D00000000000000003600000028000000"& _ _Reverse8(Hex($Width,8))& _ _Reverse8(Hex($Height,8))& _ "0100180000000000"& _ _Reverse8(Hex(($Height)* _ ($Width)*3+($Height*$c),8))& _ "00000000000000000000000000000000") Local $rowData=Binary(""), $imageData=Binary("") for $i=1 to $Width $rowData&=Binary("0xFFFFFF") Next $rowData&=$d for $i=1 to $Height $imageData&=$rowData Next Local $BMPHandle[4] = [0,$Width,$Height,DllStructCreate('ubyte['&BinaryLen($Header&$imageData)&']')] DllStructSetData($BMPHandle[3],1,$Header&$imageData) For $i = 0 To $iW-1 For $i2 = 0 To $iH-1 local $offset = 54+(($BMPHandle[2]*($BMPHandle[1]*3+$BMPHandle[0]))-(($i2+1)*($BMPHandle[1]*3+$BMPHandle[0]))+($i*3)) DllStructSetData($BMPHandle[3],1,dec(StringLeft($aBitmap[$i][$i2],2)),$offset+3) DllStructSetData($BMPHandle[3],1,dec(stringmid($aBitmap[$i][$i2],3,2)),$offset+2) DllStructSetData($BMPHandle[3],1,dec(StringRight($aBitmap[$i][$i2],2)),$offset+1) Next Next $out=FileOpen(FileSaveDialog("Save sketch", @ScriptDir, "BMP (*.bmp)"),18) FileWrite($out,DllStructGetData($BMPHandle[3],1)) FileClose($out) EndFunc Func _Reverse8($inHex) Return StringMid($inHex,7,2)&StringMid($inHex,5,2)&StringMid($inHex,3,2)&StringMid($inHex,1,2) EndFunc