Global $iW=Int(InputBox("Configure","Choose a"& _; " size in px. (min. 32)"))+0*Opt("MouseCoo"& _;... "rdMode",2),$iH=$iW,$PX=8,$F[$iW][$iH],$J _;...... [$iW*2][8],$P=C(0),$Z[$iW][$iH],$CC[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]],$GG= _; GUICreate("Simple Sketch",$iW*$PX,($iH+(8/2))*$PX) For $i=0 To $iW-1;................................ For $i2=0 To $iH-1;............................... $F[$i][$i2]=GUICtrlCreateLabel("",$i*$PX,$i2*$PX _ ,$PX,$PX);........................................ $Z[$i][$i2+0*GUICtrlSetBkColor(-1,C(9))]= _;...... StringTrimLeft(C(9),2);........................... Next;............................................. Next;............................................. For $i=0 To 20-1;................................. GUICtrlSetBkColor(GUICtrlCreateLabel("",(($iW-1) _ -($CC[$i][0]/2)-1)*$PX,$iH*8+($PX/2)+(12*($i>9)) _ ,12,12),C($CC[$i][1]));........................... Next;............................................. $O=GUICtrlCreateLabel("",(($iW-1)-(27/2)-1) _;.... *$PX-28,($iH+(1/2))*$PX,3*$PX,3*$PX);............. GUICtrlSetBkColor(-1*GUISetState(),0x000000);..... GUICtrlSetFont(-1, 18+0*GUICtrlCreateLabel( _;.... "Save",$PX/2,$iH*8+($PX/2),$PX*8,$PX*4));......... While BitXOR(Sleep(1000/500),(GUIGetMsg()=-3));... If WinActive($GG) Then;........................... $K=GUIGetCursorInfo($GG);......................... If BitAND(($K[0]>0),($K[1]>0),($K[0]<$iW*$PX),( _; $K[1]<($iH+(8/2))*$PX),$K[2]) Then;............... If BitAnd(($K[0]>0),($K[1]>0),($K[0]<$iW*$PX),( _; $K[1]<$iH*$PX)) Then $Z[Int($K[0]/$PX)][Int($K[1 _ ]/$PX)]=StringTrimLeft($P,2*GUICtrlSetBkColor($F _ [Int($K[0]/$PX)][Int($K[1]/$PX)], $P));........... If BitAnd(($K[0]>0),($K[1]> $iH*$PX),($K[0]<(19/ _ 2)*$PX),($K[1]<($iH+(8/2))*$PX)) Then _Save();.... If BitAnd(($K[0]>(($iW-1)-(27/2)-1)*$PX),($K[1]> _ ($iH+(1/2))*$PX),($K[0]<(($iW-1)*2-2)*$PX),($K[1 _ ]<($iH+(7/2))*$PX)) Then GUICtrlSetBkColor($O& _;. StringTrimLeft(Assign("P",C($CC[(9-Int(($K[0]-(( _ ($iW-1)-(27/2)-1)*$PX))/12))+(10*($K[1]>($iH+(4/ _ 2))*$PX))][1])),1),$P);........................... If BitAND(($K[0]>(($iW-1)-(27/2)-1)*$PX-28),($K[ _ 1]>($iH+(1/2))*$PX),($K[0]<(($iW-1)-(27/2)-1)* _;. $PX-4),($K[1]<($iH+(1/2))*$PX+24)) Then _;........ GUICtrlSetBkColor($O&StringTrimLeft(Assign("P", _; InputBox("Color Input", "Choose a custom color:" _ , C(0))),1),$P);.................................. EndIf;............................................ EndIf;............................................ WEnd;............................................. Func C($a);....................................... Dim $b[20]=["000000","1A1A1A","333333","4D4D4D", _ "666666","808080","999999","B3B3B3","CCCCCC", _;.. "FFFFFF","0000FF","000080","00FFFF","008080", _;.. "00FF00","008000","FFFF00","808000","FF0000", _;.. "800000"];........................................ Return "0x"&$b[$a];............................... EndFunc;.......................................... Func _Save();..................................... Local $c=Mod($iW,4),$d=Binary("");................ if $c=3 then $d=Binary("0x000000");............... if $c=2 then $d=Binary("0x0000");................. if $c=1 then $d=Binary("0x00");................... Local $HD=Binary("0x424D00000000000000003600000" _ &"028000000"&R(Hex($iW,8))&R(Hex($iH,8))&"01001" _ &"80000000000"&R(Hex(($iH)*($iW)*3+($iH*$c),8))& _ "00000000000000000000000000000000"),$RD=Binary( _; ""),$ID=Binary("");............................... for $i=1 to $iW;.................................. $RD&=Binary("0xFFFFFF");.......................... Next;............................................. $RD&=$d;.......................................... for $i=1 to $iH;.................................. $ID&=$RD;......................................... Next;............................................. Dim $BH[4]=[0,$iW,$iH,DllStructCreate('ubyte['& _; BinaryLen($HD&$ID)&']')];......................... DllStructSetData($BH[3],1,$HD&$ID);............... For $i = 0 To $iW-1;.............................. For $i2 = 0 To $iH-1;............................. local $offset=54+(($BH[2]*($BH[1]*3+$BH[0]))-(( _; $i2+1)*($BH[1]*3+$BH[0]))+($i*3));................ DllStructSetData($BH[3],1+DllStructSetData($BH[3 _ ],1+DllStructSetData($BH[3],1,dec(StringRight($Z _ [$i][$i2],2)),$offset+1),dec(stringmid($Z[$i][ _;. $i2],3,2)),$offset+2),dec(StringLeft($Z[$i][$i2] _ ,2)),$offset+3);.................................. Next;............................................. Next;............................................. $FO=FileOpen(FileSaveDialog("Save sketch", _;..... @ScriptDir,"BMP(*.bmp)"),18);..................... FileWrite($FO,DllStructGetData($BH[3],1));........ FileClose($FO);................................... EndFunc;.......................................... Func R($IH);...................................... Return StringMid($IH,7,2)&StringMid($IH,5,2) _;... &StringMid($IH,3,2)&StringMid($IH,1,2);........... EndFunc;..........................................