Advertisement
Guest User

MS Paint, copy - not paste but draw "manually"

a guest
Sep 9th, 2015
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
  2. SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
  3. SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
  4.  
  5. ; Endringslogg;
  6. ; Versjon 2 - Funksjonen msPaintSetColorDecimal() for endring av forgrunnsfarge. Nå husker den de forrige
  7. ;  fargene. Dvs dersom grønn er uendret, så skippes feltet grønt. Dette kan spare noe tid totalt.
  8. ; Next: Opptegning én farge av gangen.
  9.  
  10. ; Versjon 2b - Prøveversjon. Tegner opp strek der hvor samme farge gjentas.
  11. ; Testen viser at 2b ikke fungerer etter hensikt:
  12. ;  * Tar lengre tid enn versjon 2 å fullføre tegning i Paint (samme skjermbilde)
  13. ;  * BUG #1: Sort tekst på hvit bakgrunn. Tegner opp feil, fyller det hvite med sort (tror sjekk av hvit-farge er årsaken)
  14. ;  * BUG #2: Bør sjekke NESTE pikselverdi snarere enn forrige. Dette pga nå tegner første piksel FØR linje tegner over samme pikselen.
  15.  
  16. ; Versjon 2b.1
  17. ;  x Prøve å luke ut feil med opptegning der bakgrunn matcher transparent farge
  18. ;  x Sjekker NESTE pikselverdi heller enn forrige.
  19.  
  20. ; NYE BUGS i testversjon 2b.1
  21. ;  x Tegner feil. Ser ut til å være relatert til fargen 0x000000 (svart) [glemt å fjerne variabel lastColor under strekStart rutina]
  22. ;  x Fargeskift. Skriver over i feltene selv om fargekomponenten hadde samme verdi som før [testet, feil ikke reell]
  23. ;  x Statistikk burde vise antall opptegnede enkeltpiksler, antall hele linjer (alt over 2 px i lengde) + antall skippede hvite piksler.
  24. ;  - Fargeskift. Ved påtruffet transparent farge og tilbake til neste farge, så er det full runde med "Rediger farger" - selv om samme farge som før transparent [skal utbedres i versjon 2b.2]
  25.  
  26. ; Versjon 2b.2
  27. ;  x Funksjonen msPaintSetColorDecimal() skal huske forrige verdisett. Dersom ingen verdier er endret så skippes åpning av "Rediger farger" vinduet. Sparer tid.
  28. ;  x MsgBox etter opptegning - endrer litt så riktig overskrift fremtrer (ikke navnet på ahk fila) [1. argument av 3 settes til 0]
  29. ; Tidsbesparelse i forhold til 2b.1 - 1622 sekunder vs. 1808 sekunder (ca 10,3% besparelse i tid)
  30. ; Next - utnytte standardfarger i Windows.
  31.  
  32. ; Versjon 2b.3
  33. ; Utnytter standardfarger i Windows. NB tilpasset engelsk versjon av Paint.
  34. ; BUG - Ved sort (0x000000) så klarer'n ikke å utnytte standardfarge [LØST]
  35. ; BUG #2 - Oppdaget i versjon 2b.4 (ikke fikset her)
  36.  
  37. ; Versjon 2b.4
  38. ; Ctrl+1 og Ctrl+2 skal lese inn pikselverdier for hjørnekoordinater på skjerm uavhengig av skjermbilde.
  39. ; BUG - ved henting av mange standardfarger etter hverandre [LØST (linje 436)]
  40.  
  41. ; Versjon 2b.5
  42. ; Ny feature som skal forbedre tegnetiden betydelig: Tegning av vertikale streker. Inntreffer når fargen under matcher.
  43. ; PROBLEM: Der store områder tegnes m ensarted farge, tar det lang tid å traversere det aktuelle området i etterkant.
  44. ; selv om ingenting tegnes inn. Oppleves som en "pause"
  45.  
  46.  
  47. ; Må legge til offset for å treffe riktig posisjon på tegneflata.
  48. canvasOffsetX := 64
  49. canvasOffsetY := 54
  50. PixelColorSkipWhiteValue := 0xFFFFFF
  51.  
  52. ; ÅPNE PROGRAM
  53. /*
  54. EnvGet, envarSystemRoot, SystemRoot
  55. Run, %envarSystemRoot%\system32\mspaint.exe, , Max, msPaintOpenPID
  56. WinWaitActive, ahk_class MSPaintApp
  57. */
  58.  
  59.  
  60. #IfWInActive, ahk_class MSPaintApp
  61.  
  62. ; Ctrl+P  --->  Begynne å tegne inn.
  63. ^p::
  64.     KeyWait, p
  65.     If (!Width) {
  66.         MsgBox, Skjerm ikke avlest, Skjermbilde må avleses før inntegning i Paint.
  67.         Return
  68.     }
  69.    
  70.     thisPixelTransparent := 0
  71.     StartTime := A_TickCount
  72.     r := 0
  73.     g := 0
  74.     b := 0
  75.    
  76.     ; 1. Setter dimensjon på tegneflaten
  77.     msPaintsetImageDimensions(Width, Height)
  78.     Sleep 500
  79.    
  80.     ; 2. Velger tegneverktøy, Blyant
  81.     Click 18,134    ; Knappen "Blyant"
  82.     Sleep 500
  83.    
  84.     ; 3. Påbegynner inntegning.
  85.     progressTotal := Width * Height
  86.     progressCurrent := 0
  87.     progressPercent := 0
  88.    
  89.     statistikkHvitepiksler := 0
  90.     statistikkStreker := 0
  91.     statistikkEnkeltPiksler := 0
  92.     statistikkVertikaleStreker := 0
  93.    
  94.     i = 1
  95.     j = 1
  96.     Loop, %Height%
  97.     {
  98.         j := A_Index
  99.         strekStart := 0
  100.        
  101.         Loop, %Width%
  102.         {
  103.             If GetKeyState("Esc")
  104.                 ExitApp, 1
  105.            
  106.             i := A_Index
  107.             i2 := i +1
  108.            
  109.             ; Sjekke for transparent pikselfarge
  110.             If (PixelColorSkipWhiteValue = farge_%i%_%j%) {
  111.                 thisPixelTransparent := 1
  112.                 statistikkHvitepiksler++
  113.             } Else {
  114.                 thisColor := farge_%i%_%j%
  115.                 thisPixelTransparent := 0
  116.             }
  117.            
  118.             If (i < Width)
  119.                 nextColor := farge_%i2%_%j%
  120.            
  121.             ; VISUELL OPPDATERING AV FREMDRIFT. BALOONTIP
  122.             progressCurrent++
  123.             If (!Mod(progressCurrent, 50)) {
  124.                 progressPercent := Floor(((progressCurrent / progressTotal) * 100)+ 0.5)
  125.                 TrayTip, Prosentvis fremdrift opptegning, %progressPercent% prosent`nLinje/rad %j%`nBredde %Width% og høyde %Height%`nTotalt antall piksler er %progressTotal%`nCurrent progress er %progressCurrent%`nStatistikk:`n Transparente piksler (ikke inntegnet) = %statistikkHvitepiksler%`n Enkeststående piklser inntegnet = %statistikkEnkeltPiksler%`n Inntegnede linjer (alt over 2 px lange) = %statistikkStreker%`n Inntegnede vertikale linjer = %statistikkVertikaleStreker%
  126.             }
  127.            
  128.            
  129.             If (strekStart) {
  130.                 ; Modus - leter etter enden av samme fargen
  131.                 If (thisColor != nextColor) {
  132.                     ; Kommet over ulik farge (hvit piksel inkludert), dvs definerer slutt på strek
  133.                    
  134.                     ; 1. Endre forgrunnsfarge til thisColor
  135.                     fargedeling(thisColor, r, g, b)
  136.                     msPaintSetColorDecimal(r,g,b,thisColor)
  137.                     ; 2. Tegne strek fra "strekStart" --> i-1
  138.                     msPaintDrawLine(strekStart, j, i, j)
  139.                     statistikkStreker++
  140.                     ; 3. Nulle ut variabel "strekStart"
  141.                     strekStart := 0
  142.                     Continue
  143.                 } Else If (i = Width) {
  144.                     ; Kommet til piksel lengst til høyre. Ettersom "strekStart" ikke er nullet ut så må nødvendigvis streken tegnes hit.
  145.                    
  146.                     ; 1. Endre forgrunnsfarge til thisColor
  147.                     fargedeling(thisColor, r, g, b)
  148.                     msPaintSetColorDecimal(r,g,b,thisColor)
  149.                     ; 2. Tegne strek fra "strekStart" --> i
  150.                     msPaintDrawLine(strekStart, j, i, j)
  151.                     statistikkStreker++
  152.                     ; 3. Nulle ut variabel "strekStart"
  153.                     strekStart := 0
  154.                     Continue
  155.                 } Else
  156.                     ; Samme farge - fortsett å lete etter ulik fage.
  157.                     Continue
  158.             }   ; if strekStart (søkemodus etter samme farger)
  159.            
  160.            
  161.             ; Dersom fargeverdien matcher transparent fargeverdi, gå videre
  162.             If (thisPixelTransparent) {
  163.                 Continue
  164.             }
  165.            
  166.             ; VERTIKAL STREK V 2b.5  START
  167.             ; Tester for vertikal strek (nedover)
  168.             If (j > Height -2)
  169.                 Goto, skipVertikalStrekSearch
  170.            
  171.             J2 := j +1
  172.             If (farge_%i%_%j2% != thisColor)
  173.                 Goto, skipVertikalStrekSearch
  174.            
  175.             ; Kommer hit - Det eksisterer en fargeverdi under med samme fargeverdi. Initiere fortsatt søk i retning nedover
  176.             While 1
  177.             {
  178.                 If (thisColor != farge_%i%_%j2%) {
  179.                     ; Fargen er ulik. Forrige posisjon av J2 var siste matchende farge.
  180.                     J2--
  181.                     Break
  182.                 }
  183.                
  184.                 ; Fargen er lik. Setter fargen under til hvit (så ikke samme piksel prosseseres to ganger)
  185.                 farge_%i%_%j2% := PixelColorSkipWhiteValue
  186.                
  187.                 ; Hindrer å søke nedafor nederste linje.
  188.                 If (J2 = Height)
  189.                     Break
  190.                 J2++
  191.             }
  192.            
  193.             ; Hit. J2 angir Y-posisjonen som streken skal tegnes TIL...
  194.             ; 1. Endre forgrunnsfarge til thisColor
  195.             fargedeling(thisColor, r, g, b)
  196.             msPaintSetColorDecimal(r,g,b,thisColor)
  197.             ; 2. Tegne strek fra (i,j) til (i,J2)
  198.             msPaintDrawLine(i, j, i, J2)
  199.             statistikkVertikaleStreker++
  200.            
  201.             ; Sette fargen for de aktuelle pikslene til hvit (så ikke samme piksel prosseseres to ganger)
  202.             J3 := j
  203.             Loop {
  204.                 J3++
  205.                 farge_%i%_%j3% := PixelColorSkipWhiteValue
  206.                 statistikkHvitepiksler--
  207.             } Until (J3 = J2)
  208.            
  209.            
  210.             Continue
  211.            
  212.             skipVertikalStrekSearch:
  213.             ; VERTIKAL STREK V 2b.5  END
  214.            
  215.             ; Deteksjon av der NESTE farge er lik. Kan ikke forekomme på siste piksel i en px-rad
  216.             ; Vil ikke kunne forekomme der fargeverdien er transparent (sjekk utført tidligere)
  217.             If (thisColor=nextColor && i<Width) {
  218.                 ; Matcher neste farge. Angir hvor streken skal starte å tegnes FRA (x-verdi)
  219.                 strekStart := i
  220.                 ; Variabel statistikkStreker oppdateres etter at strekene faktisk er inntegnet.
  221.                 Continue
  222.             }
  223.            
  224.             ; Foranstående tester har allerede utelukket muligheten for samme fargeverdi.
  225.             ; Derfor er testen for farge-ulikhet fjernet herfra. Går rett på sak nemlig.
  226.             fargedeling(thisColor, r, g, b)
  227.             msPaintSetColorDecimal(r,g,b,thisColor)
  228.             msPaintPaintDot(i, j, 0)
  229.             statistikkEnkeltPiksler++
  230.         }   ; inner loop (i)
  231.     }   ; Outer loop (j)
  232.    
  233.     ; Oppdatere statistikk etter endt tegning.
  234.     progressPercent := Floor(((progressCurrent / progressTotal) * 100)+ 0.5)
  235.     tidsforbruk := Round((A_TickCount - StartTime) / 1000, 1)
  236.    
  237.     MsgBox, 0, Opptegning ferdig, %progressPercent% prosent`nLinje/rad %j%`nBredde %Width% og høyde %Height%`nTotalt antall piksler er %progressTotal%`nCurrent progress er %progressCurrent%`nStatistikk:`n Transparente piksler (ikke inntegnet) = %statistikkHvitepiksler%`n Enkeststående piklser inntegnet = %statistikkEnkeltPiksler%`n Inntegnede linjer (alt over 2 px lange) = %statistikkStreker%`n Inntegnede vertikale linjer = %statistikkVertikaleStreker%`n`nTidsforbruk på opptegning: %tidsforbruk% sekunder.
  238. Return
  239.  
  240.  
  241. ; Teste "Rediger farger"
  242. ^t::
  243.     MsgBox, kjem hit
  244.     Loop, 10
  245.     {
  246.         msPaintSetColorDecimal(100,100,100)
  247.         msPaintSetColorDecimal(100,0,100)
  248.         msPaintSetColorDecimal(100,100,0)
  249.         msPaintSetColorDecimal(0,100,0)
  250.         msPaintSetColorDecimal(0,100,100)
  251.     }
  252. Return
  253.  
  254.  
  255. #If
  256.  
  257.  
  258. ; Ctrl+T  --->  TEST
  259. ^t::
  260.     r := g := b := 0
  261.     fargedeling(0x88BBFF, r, g, b)
  262.     MsgBox, 0, Fargeverdier oppdelt, Rød %r%`nGrønn %g%`nBlå %b%
  263. Return
  264.  
  265.  
  266. ; Ctrl+P  --->  Laste inn fra PixelGetColor for aktuelt skjembilde.
  267. ^p::
  268.     WinGetActiveStats, Title, Width, Height, X, Y
  269.     progressTotal := Width * Height
  270.     StartTime := A_TickCount
  271.     KeyWait, p
  272.     progressCurrent := 0
  273.     progressPercent := 0
  274.     i = 1
  275.     j = 1
  276.     Loop, %Height%
  277.     {
  278.         j := A_Index
  279.         Loop, %Width%
  280.         {
  281.             If GetKeyState("Esc")
  282.                 ExitApp, 1
  283.             i := A_Index
  284.             PixelGetColor, memGetFarge, i, j, RGB
  285.             farge_%i%_%j% := memGetFarge
  286.             progressCurrent++
  287.             ;MouseMove, j, i, 0
  288.             If (!Mod(progressCurrent, 50)) {
  289.                 progressPercent := Floor(((progressCurrent / progressTotal) * 100)+ 0.5)
  290.                 TrayTip, Prosentvis fremdrift, %progressPercent% prosent`nLinjer = %i%`nPiksler neste linje %j%`nBredde %Width% og høyde %Height%`nTotalt antall piksler er %progressTotal%`nCurrent progress er %progressCurrent%
  291.             }
  292.         }
  293.     }
  294.     progressPercent := Floor(((progressCurrent / progressTotal) * 100)+ 0.5)
  295.     TrayTip, Prosentvis fremdrift, %progressPercent% prosent`nLinjer = %i%`nPiksler neste linje %j%`nBredde %Width% og høyde %Height%`nTotalt antall piksler er %progressTotal%`nCurrent progress er %progressCurrent%
  296.    
  297.     tidsforbruk := Round((A_TickCount - StartTime) / 1000, 1)
  298.     MsgBox, Tidsforbruk, Det tok følgende tid å lese inn pikselverdiene:`n%tidsforbruk% sekunder...
  299. Return
  300.  
  301. ; Ctrl+1  -  Venstre øvre hjørne defineres.
  302. ^1::
  303.     MouseGetPos, offsetX, offsetY
  304.     TrayTip, Offset verdier angitt, Offset X = %offsetX%`nOffset Y = %offsetY%
  305. Return
  306.  
  307. ; Ctrl+2  -  Høyre nedre hjørne defineres + innlesing utføres.
  308. ^2::
  309.     ; Sjekker om offsetX er definert. Dette kan være et problem like etter at scriptet er startet opp.
  310.     If (offsetX = "") {
  311.         MsgBox, 0, Venstre øvre hjørne ikke angitt, Trykk på Ctrl+1 når musepeker er plassert over`nønsket posisjon.
  312.         Return
  313.     }
  314.    
  315.     MouseGetPos, corner2positionX, corner2positionY
  316.    
  317.     ; Sjekker at nedre høyre hjørne faktisk er lengre ned og lengre til høyre i forhold til offset.
  318.     If !(offsetX < corner2positionX && offsetY < corner2positionY) {
  319.         MsgBox, 0, Ugyldige hjørnekoordinater, Hjørne 2 er ikke reelt plassert lenger mot høyre og lenger ned enn offset.`nPrøv igjen - Husk at Ctrl+1 for offset kan kjøres utallige ganger etter hverandre...
  320.         Return
  321.     }
  322.    
  323.     Width := corner2positionX - offsetX
  324.     Height := corner2positionY - offsetY
  325.    
  326.     progressTotal := Width * Height
  327.     StartTime := A_TickCount
  328.     KeyWait, 2
  329.     progressCurrent := 0
  330.     progressPercent := 0
  331.    
  332.     Loop, %Height%
  333.     {
  334.         j_offset := A_Index + offsetY -1
  335.         j := A_Index
  336.         Loop, %Width%
  337.         {
  338.             If GetKeyState("Esc")
  339.                 ExitApp, 1
  340.             i_offset := A_Index + offsetX -1
  341.             i := A_Index
  342.             PixelGetColor, memGetFarge, i_offset, j_offset, RGB
  343.             farge_%i%_%j% := memGetFarge
  344.             progressCurrent++
  345.             ;mmm := farge_%i%_%j%
  346.             ;MouseMove, i, j, 0
  347.             ;TrayTip, fargesjekk innlest verdi, farge_%i%_%j% `t%mmm%
  348.             ;Sleep 20
  349.             If (!Mod(progressCurrent, 50)) {
  350.                 progressPercent := Floor(((progressCurrent / progressTotal) * 100)+ 0.5)
  351.                 TrayTip, Prosentvis fremdrift, %progressPercent% prosent`nLinjer = %i%`nPiksler neste linje %j%`nBredde %Width% og høyde %Height%`nTotalt antall piksler er %progressTotal%`nCurrent progress er %progressCurrent%
  352.             }
  353.         }
  354.     }
  355.    
  356.     progressPercent := Floor(((progressCurrent / progressTotal) * 100)+ 0.5)
  357.     TrayTip, Prosentvis fremdrift, %progressPercent% prosent`nLinjer = %i%`nPiksler neste linje %j%`nBredde %Width% og høyde %Height%`nTotalt antall piksler er %progressTotal%`nCurrent progress er %progressCurrent%
  358.    
  359.     tidsforbruk := Round((A_TickCount - StartTime) / 1000, 1)
  360.     MsgBox, Tidsforbruk, Det tok følgende tid å lese inn pikselverdiene:`n%tidsforbruk% sekunder...
  361.    
  362. Return
  363.  
  364.  
  365. ; Ikke bruk for denne lenger.
  366. /*
  367. ; Ctrl+D  --->  Dumpe.
  368. ^d::
  369.     KeyWait, d
  370.     If (!Width) {
  371.         MsgBox, Skjerm ikke avlest, Skjermbilde må avleses før inntegning i Paint.
  372.         Return
  373.     }
  374.    
  375.     Loop, %Height%
  376.     {
  377.         j := A_Index
  378.         Loop, %Width%
  379.         {
  380.             If GetKeyState("Esc")
  381.                 ExitApp, 1
  382.             i := A_Index
  383.            
  384.             StringPaste := "Array(" . i . ", " . j . ") =`t" . farge_%i%_%j%
  385.             ;MsgBox, 0, Stringpaste, %StringPaste%
  386.             SendInput, %StringPaste%`n
  387.             Sleep 2
  388.         }
  389.     }
  390. Return
  391. */
  392.  
  393.  
  394.  
  395.  
  396.  
  397. ; --------------------------   FUNKSJONER   -------------------------------
  398.  
  399. ; Setter størrelsen på tegneflaten (canvas)
  400. msPaintsetImageDimensions(x,y) {
  401.     IfWinNotActive, ahk_class MSPaintApp
  402.     {
  403.         MsgBox, Paint må være aktivt vindu for å kunne endre størrelse!
  404.         Return
  405.     }
  406.     SendInput {Ctrl down}e{Ctrl up}
  407.     SendInput %x%
  408.     SendInput {Tab}
  409.     SendInput %y%
  410.     SendInput {Enter}
  411.     WinWaitNotActive, ahk_class #32770
  412. }
  413.  
  414.  
  415. ; Definere farge (på "blyant") i Paint.
  416. ; Versjon 2: Static på hver fargeverdi og skippe aventuelle farger som IKKE er endret siden siste oppdatering. Dette for å unngå at samme verdien overskriver
  417. ; Versjon 2b.2 - Skipper åpning av "Rediger farger" dialogboks dersom ingen av verdiene er endret siden sist.
  418. msPaintSetColorDecimal(r,g,b, hexverdi:=0x000000) {
  419.     Static r_last, g_last, b_last
  420.     Static standardFarger, std_x, std_y, std_fargeIndeks
  421.    
  422.     If (!standardFarger.MaxIndex()) {
  423.         standardFarger := [0x000000,0x400000,0x800000,0x804040,0xFF0000,0xFF8080, 0x808000,0x804000,0xFF8000,0xFF8040,0xFFFF00,0xFFFF80 ,0x808040,0x004000,0x008000,0x00FF00,0x80FF00,0x80FF80 ,0x808080,0x004040,0x008040,0x008080,0x00FF40,0x00FF80 ,0x408080,0x000080,0x0000FF,0x004080,0x00FFFF,0x80FFFF ,0xC0C0C0,0x000040,0x0000A0,0x8080FF,0x0080C0,0x0080FF ,0x400040,0x400040,0x800080,0x800040,0x8080C0,0xFF80C0 ,0xFFFFFF,0x400080,0x8000FF,0xFF0080,0xFF00FF,0xFF80FF]
  424.         std_x := [22,22,22,22,22,22,48,48,48,48,48,48,71,71,71,71,71,71,96,96,96,96,96,96,121,121,121,121,121,121,147,147,147,147,147,147,172,172,172,172,172,172,197,197,197,197,197,197]
  425.         std_y := [172,152,129,104,84,64,172,152,129,104,84,64,172,152,129,104,84,64,172,152,129,104,84,64,172,152,129,104,84,64,172,152,129,104,84,64,172,152,129,104,84,64,172,152,129,104,84,64]
  426.         std_fargeIndeks := 0
  427.     }
  428.    
  429.     If (r=r_last && g=g_last && b=b_last)   ; Ingen endring
  430.         Return
  431.    
  432.     IfWinNotActive, ahk_class MSPaintApp
  433.     {
  434.         MsgBox, Paint må være aktivt vindu for å kunne endre fargen!
  435.         Return
  436.     }
  437.     MouseGetPos, musX, musY
  438.    
  439.     SendInput {Alt down}a{Alt up}   ; Aktiverer menyen "Farger"
  440.     SendInput {Enter}   ; Velge eneste menyvalg "Rediger farger" (funker ikke i engelsk versjon av XP)
  441.     WinWaitActive, Rediger farger
  442.    
  443.     ; Engelsk versjon (kommentert bort)
  444.     /*
  445.     Click 157,39    ; Meny "Farger"
  446.     Sleep 5
  447.     Click 178,62    ; undermeny "Edit Colors"
  448.     WinWaitActive, Edit Colors
  449.     */
  450.    
  451.     ; Kalle opp funksjon som håndterer matrise. Dvs leter etter standardfarger.
  452.     If sjekkStandardFarger(hexverdi, standardFarger, std_x, std_y, std_fargeIndeks)
  453.     {
  454.         TrayTip, Standardfarge funnet, Fargeverdien er %hexverdi%
  455.         MouseMove, std_x[std_fargeIndeks], std_y[std_fargeIndeks]
  456.         Sleep 4
  457.         Click
  458.     }
  459.     Else
  460.     {
  461.         ; Definere fargen selv, ikke representert blandt standardfargene...
  462.         Click, 82,279   ; Knappen "Define Custom Colors >>"
  463.         ; FReq: Vente/polle på at vinduet får en gitt bredde
  464.         Sleep, 10
  465.         If (r != r_last) {
  466.             SendInput {Alt down}r{Alt up}   ; Engelsk "r" (samme)
  467.             Sleep 2
  468.             SendInput %r%
  469.             Sleep 2
  470.         }
  471.         If (g != g_last) {
  472.             SendInput {Alt down}g{Alt up}   ; Engelsk "g" (samme)
  473.             Sleep 2
  474.             SendInput %g%
  475.             Sleep 2
  476.         }
  477.         If (b != b_last) {
  478.             SendInput {Alt down}b{Alt up}   ; Engelsk "u"
  479.             Sleep 2
  480.             SendInput %b%
  481.             Sleep 2
  482.         }
  483.     }
  484.     Sleep 10
  485.     Click 45,304    ; Knappen "Ok"
  486.    
  487.     r_last := r
  488.     g_last := g
  489.     b_last := b
  490.    
  491.     WinWaitNotActive, Rediger farger
  492.     If mouseReset
  493.         MouseMove, musX, musY, 0
  494. }
  495.  
  496.  
  497. ; Hånderer matrise med stnadardfarger.
  498. ; Returverdier. 1=farge match, 0=ingen std. farge matcher
  499. sjekkStandardFarger(hexverdi, ByRef standardFarger, ByRef std_x, ByRef std_y, ByRef std_fargeIndeks) {
  500.     Loop, 48
  501.     {
  502.        
  503.         If (hexverdi = standardFarger[A_Index]) {
  504.            
  505.             If (A_Index < 3) {
  506.                 std_fargeIndeks := A_Index
  507.                 Return 1
  508.             }
  509.                
  510.             n_minus := A_Index -1
  511.            
  512.             tmp_standardFarger := standardFarger[n_minus]
  513.             tmp_x := std_x[n_minus]
  514.             tmp_y := std_y[n_minus]
  515.            
  516.             standardFarger[n_minus] := standardFarger[A_Index]
  517.             std_x[n_minus] := std_x[A_Index]
  518.             std_y[n_minus] := std_y[A_Index]
  519.            
  520.             standardFarger[A_Index] := tmp_standardFarger
  521.             std_x[A_Index] := tmp_x
  522.             std_y[A_Index] := tmp_y
  523.            
  524.             std_fargeIndeks := n_minus
  525.             Return 1
  526.         }
  527.     }
  528.     Return 0
  529. }
  530.  
  531.  
  532. ; Tegner én enkelt pixel
  533. msPaintPaintDot(x, y, forsinke:=0) {
  534.     ; ENGELSK: Verdier er hhv. 64x54
  535.     static canvasOffsetX = 64
  536.     static canvasOffsetY = 46
  537.     paintDotX := canvasOffsetX + x
  538.     paintDotY := canvasOffsetY + y
  539.     Click, %paintDotX%, %paintDotY%
  540.     If forsinke
  541.         Sleep forsinke
  542. }
  543.  
  544.  
  545. ; Tegner linje fra startposisjon til sluttposisjon.
  546. msPaintDrawLine(x1, y1, x2, y2) {
  547.     ; ENGELSK: Verdier er hhv. 64x54
  548.     static canvasOffsetX = 64
  549.     static canvasOffsetY = 46
  550.     paintDotX1 := canvasOffsetX + x1
  551.     paintDotY1 := canvasOffsetY + y1
  552.     paintDotX2 := canvasOffsetX + x2
  553.     paintDotY2 := canvasOffsetY + y2
  554.     MouseMove, paintDotX1, paintDotY1
  555.     Click down
  556.     ;Sleep 20
  557.     MouseMove, paintDotX2, paintDotY2
  558.     ;Sleep 20
  559.     Click up
  560. }
  561.  
  562.  
  563. ; Fargeverdi oppdeling.
  564. fargedeling(hexverdi, ByRef r_desimal, ByRef g_desimal, ByRef b_desimal) {
  565.     ;http://www.autohotkey.com/board/topic/64390-getpixelcolor-how-to-separate-rgb-values/
  566.     vblue := (hexverdi & 0xFF)
  567.     vgreen := ((hexverdi & 0xFF00) >> 8)
  568.     vred := ((hexverdi & 0xFF0000) >> 16)
  569.    
  570.     r_desimal := vred
  571.     g_desimal := vgreen
  572.     b_desimal := vblue
  573. }
  574.  
  575.  
  576. ; Konvertere HEX til desimal (ikke brukt)
  577. heksTilDesimal(HX) {
  578.     ;MsgBox, funksjonen heksTilDesimal, Parameter er %HX%
  579.     HK = 0x%HX%
  580.     SetFormat Integer, H
  581.     Nummer := HK + 0
  582.     SetFormat Integer, D
  583.     NummerD := Nummer + 0
  584.     ;MsgBox, Nummeret desikmal er %NummerD%
  585.     Return NummerD
  586. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement