# Använda skript

I &chalk; kan du skriva skript med Ruby eller Python (tillgängligheten för tolkarna kan bero på vad din distribution eller administratören av din dator installerade). Här hittar du en beskrivning av programmeringsgränssnittet för skript.

Vissa exempel levereras med &chalk;, och du kan hitta dem i `/usr/share/apps/chalk/scripts` (eller `/opt/kde/share/apps/chalk/scripts`).

## Variabler i modulen `Krosschalkcore`

- `ChalkDocument` returnerar ett `Document`-objekt

- `ChalkScript` returnerar ett `ScriptProgress`-objekt

Du kan hämta ett objekt med funktionen `get` i modulen `Krosschalkcore`. I Ruby måste du skriva något som liknar det här:

    doc = Krosschalkcore::get("ChalkDocument")
    script = Krosschalkcore::get("ChalkScript")

## Funktioner i modulen `Krosschalkcore`

- Funktion: `getBrush`

  Funktionen returnerar en pensel (`Brush`) som tas från listan med &chalk;s resurser. Den har ett argument: penselns namn. Till exempel (i Ruby):

      Krosschalkcore::getBrush("Circle (05)")

- Funktion: `getFilter`

  Funktionen returnerar ett filter (`Filter`) som tas från listan med &chalk;s resurser. Den har ett argument: filtrets namn. Till exempel (i Ruby):

      Krosschalkcore::getFilter("invert")

- Funktion: `getPattern`

  Funktionen returnerar ett mönster (`Pattern`) som tas från listan med &chalk;s resurser. Den har ett argument: mönstrets namn. Till exempel (i Ruby):

      Krosschalkcore::getPattern("Bricks")

- Funktion: `loadBrush`

  Funktionen laddar en pensel (`Brush`) och returnerar den därefter. Den har ett argument: penselns filnamn.

- Funktion: `loadPattern`

  Funktionen laddar ett mönster (`Pattern`) och returnerar det därefter. Den har ett argument: mönstrets filnamn.

- Funktion: `newCircleBrush`

  Funktionen returnerar en pensel (`Brush`) med en cirkulär form. Den har minst två argument: bredd och höjd. Den kan också ha två ytterligare argument: skuggans bredd och höjd. Om skuggan inte anges, används ingen. Till exempel (i Ruby):

      Krosschalkcore::newCircleBrush(10,20) # skapa en enkel cirkel
      Krosschalkcore::newCircleBrush(10,20,5,10) # skapa en toning

- Funktion: `newHSVColor`

  Funktionen returnerar en ny färg (`Color`) med den angivna HSV-trippeln. Den har tre argument: färgtonskomponenten (0 till 255), färgmättnadskomponenten (0 till 255), och värdekomponenten (0 till 255). Till exempel (i Ruby):

      Krosschalkcore::newRGBColor(255,125,0)

- Funktion: `newImage`

  Funktionen returnerar en ny bild (`Image`). Den har fyra argument: bredd, höjd, färgrymdsidentifikation, bildens namn. Den returnerar objektet `Image`. Till exempel (i Ruby):

      Krosschalkcore::newImage(10,20, "RGBA", "kikoo")

- Funktion: `newRectBrush`

  Funktionen returnerar en pensel (`Brush`) med en rektangulär form. Den har minst två argument: bredd och höjd. Den kan också ha två ytterligare argument: skuggans bredd och höjd. Om skuggan inte anges, används ingen. Till exempel (i Ruby):

      Krosschalkcore::newRectBrush(10,20) # skapa en enkel rektangel
       Krosschalkcore::newRectBrush(10,20,5,10) # skapa en toning

- Funktion: `newRGBColor`

  Funktionen returnerar en ny färg (`Color`) med den angivna RGB-trippeln. Den har tre argument: den röda komponenten (0 till 255), den blåa komponenten (0 till 255), och den gröna komponenten (0 till 255). Till exempel (i Ruby):

      Krosschalkcore::newRGBColor(255,0,0) # skapa en röd färg
      Krosschalkcore::newRGBColor(255,255,255) # skapa en vit färg

## Beskrivningar och funktionslista för diverse objekt i `Krosschalkcore`

- Objekt: PaintLayer

  - Funktion: `beginPainting`

  - Funktion: `convertToColorspace`

    Konvertera bilden till en färgrymd. Funktionen har ett argument: namnet på den resulterande färgrymden. Till exempel (i Ruby):

        image.convertToColorspace("CMYK")

  - Funktion: `createHistogram`

    Funktionen skapar ett histogram för lagret. Den har två argument: histogramtypen ("RGB8HISTO"), och 0 om histogrammet är linjärt eller 1 om det är logatimiskt.

  - Funktion: `createHLineIterator`

    Skapa en iterator för ett lager, som går igenom en rad. Funktionen har tre argument: `x` (start i raden), `y` (radens vertikala position), radens bredd.

  - Funktion: `createPainter`

    Funktionen skapar ett målningsobjekt (`Painter`) som låter dig måla på lagret.

  - Funktion: `createRectIterator`

    Skapa en iterator för ett lager, som går igenom ett rektangulärt område. Funktionen har fyra argument: `x`, `y`, rektangelns bredd, rektangelns höjd.

  - Funktion: `createVLineIterator`

    Skapa en iterator för ett lager, som går igenom en kolumn. Funktionen har tre argument: `x` (kolumnens horisontella position), `y` (start i kolumnen), kolumnens höjd.

  - Funktion: `endPainting`

    Använd funktionen för att stänga aktuell ångringspost och lägga till den i historiken.

  - Funktion: `fastWaveletTransformation`

    Returnerar lagrets snabba wavelet-transform.

  - Funktion: `fastWaveletUntransformation`

    Gör omvänd transform av en snabb wavelet till lagret. Den har ett argument: ett wavelet-objekt. Till exempel (i Ruby):

        wavelet = layer.fastWaveletTransformation()
        layer.fastWaveletUntransformation(wavelet)

  - Funktion: `getHeight`

    Returnera lagrets höjd.

  - Funktion: `getWidth`

    Returnera lagrets bredd.

- Objekt: `Filter`

  - Funktion: `getFilterConfiguration`

    Funktionen returnerar filterinställningen (`FilterConfiguration`) som hör ihop med filtret.

  - Funktion: `process`

    Funktionen utför filtret. Den har minst ett argument: lagret som är källan. Du kan också använda fyra följande argument: `x`, `y`, `bredd`, `höjd`. (`x`, `y`, `bredd`,`höjd`) definierar den rektangulära område där filtret beräknas. Om rektangeln inte är definierad, används filtret på hela lagret. Till exempel (i Ruby)

        doc = Krosschalkcore::get("ChalkDocument")
        image = doc.getImage()
        layer = image.getActivePaintLayer()
        width = layer.getWidth()
        height = layer.getHeight()
        filter = Krosschalkcore::getFilter("invert")
        filter.process(layer, layer)
        filter.process(layer, layer, 10, 10, 20, 20 )

- Objekt: `FilterConfiguration`

  - Funktion: `getProperty`

    Funktionen returnerar en parameters värde för tillhörande filter (`Filter`). Den har ett argument: parameterns namn.

  - Funktion: `setProperty`

    Funktionen definierar en parameter för tillhörande filter (`Filter`). Den har två argument: parameterns namn och värde, vars typ beror på filtret.

- Objekt: `Histogram`

  Klassen låter dig komma åt histogrammet för ett målningslager (`PaintLayer`). Exempel (i Ruby):

      doc = krosschalkcore::get("ChalkDocument")
       image = doc.getImage()
       layer = image.getActiveLayer()
       histo = layer.createHistogram("RGB8HISTO",0)
       min = layer.getMin() * 255
       max = layer.getMax() * 255
       for i in min..max
         print layer.getValue(i)
         print "\n"
       end

  - Funktion: `getChannel`

    Returnera den valda kanalen.

  - Funktion: `getCount`

    Funktionen returnerar antal bildpunkter som används av histogrammet.

  - Funktion: `getHighest`

    Funktionen returnerar histogrammets största värde.

  - Funktion: `getLowest`

    Funktionen returnerar histogrammets minsta värde.

  - Funktion: `getMax`

    Funktionen returnerar histogrammets maximala gränsvärde (värden på större avstånd än maximala värdet är noll). Värdet är i intervallet 0.0 – 1.0.

  - Funktion: `getMean`

    Den här funktionen returnerar histogrammets medelvärde.

  - Funktion: `getMin`

    Funktionen returnerar histogrammets minimala gränsvärde (värden på mindre avstånd än minimala värdet är noll). Värdet är i intervallet 0.0 – 1.0.

  - Funktion: `getNumberOfBins`

    Returnerar antal staplar i histogrammet.

  - Funktion: `getTotal`

    Den här funktionen returnerar summan av alla värden i histogrammet.

  - Funktion: `getValue`

    Returnerar värdet för en stapel i histogrammet. Funktionen har ett argument: indexet i intervallet [0..255].

  - Funktion: `setChannel`

    Välj kanal i lagret som resultatet i histogrammet ska hämtas från. Funktionen har ett argument: kanalnumret.

- Objekt: `ScriptProgress`

  `ScriptProgress` används för att hantera förloppsraden i &chalk;s statusrad. Till exempel (i Ruby):

      script = Krosschalkcore::get("ChalkScript")
      script.setProgressTotalSteps(1000)
      script.setProgressStage("progressive", 0)
      for i in 1..900
        script.incProgress()
      end
      script.setProgressStage("brutal", 1000)

  - Funktion: `incProgress`

    Den här funktionen ökar förloppsindikeringen med ett steg.

  - Funktion: `setProgress`

    Den här funktionen ställer in förloppsindikeringens värde. Den har ett argument: förloppsindikeringens värde.

  - Funktion: `setProgressStage`

    Den här funktionen ställer in förloppsindikeringens värde och visar texten.

  - Funktion: `setProgressTotalSteps`

    Funktionen ställer in antal steg som skriptet kommer att behöva. Den har ett argument: det maximala värdet hos förloppsindikeringen

- Objekt: `Wavelet`

  Objektet innehåller koefficienterna för en wavelet-transform av ett målningslager (`PaintLayer`).

  - Funktion: `getDepth`

    Returnerar lagrets djup.

  - Funktion: `getNCoeff`

    Returnerar värdet på den N:e koefficienten. Funktionen har ett argument: koefficientens index.

  - Funktion: `getNumCoeffs`

    Returnerar antal koefficienter i denna wavelet-transform (= storlek * storlek * djup).

  - Funktion: `getSize`

    Returnerar wavelet-transformens storlek (storlek = bredd * höjd).

  - Funktion: `getXYCoeff`

    Returnerar en koefficients värde. Funktionen har två argument: `x` och `y`.

  - Funktion: `setNCoeff`

    Ställer in värdet för den N:e koefficienten. Funktionen har två argument: koefficientens index och koefficientens nya värde.

  - Funktion: `setXYCoeff`

    Ställer in värdet för en koefficient. Funktionen har tre argument: `x`, `y` ochkoefficientens nya värde.

- Objekt: `Painter`

  - Funktion: `convolve`

    Funktionen använder en faltningskärna på en bild. Den har minst tre argument: en lista av listor med kärnan (alla listor måste ha samma storlek), faktor och förskjutning.

    Värdet av en bildpunkt anges av följande funktion: K * P / faktor + förskjutning, där K är kärnan och P är grannskapet.

    Den kan ha följande valfria argument: `kantoperation` (styr hur bildpunkterna i kanten på en bild ska faltas: 0 = använd förvald färg, 1 = använd bildpunkten på bildens motsatta sida, 2 = använd kantens bildpunkt, 3 = undvik bildpunkter vid kanten), `kanal` (1 för färg, 2 för alfa, 3 för båda), `x`, `y`, `bredd`, `höjd`.

  - Funktion: `setFillThreshold`

    Ställer in fylltröskeln. Den har ett argument: tröskeln.

  - Funktion: `fillColor`

    Börja fylla med en färg. Den har två argument: `x` och `y`.

  - Funktion: `fillPattern`

    Börja fylla med ett mönster. Den har två argument: `x` och `y`.

  - Funktion: `paintPolyline`

    Funktionen ritar en flerlinje. Den har två argument: en lista med x-positioner och en lista med y-positioner.

  - Funktion: `paintLine`

    Funktionen ritar en linje. Den har fem argument: `x1`, `y1`, `x2`, `y2`, and `tryck`.

  - Funktion: `paintBezierCurve`

    Funktion ritar en Bezier-kurva. Den har tio argument: `x1`, `y1`, `p1`, `cx1`, `cy1`, `cx2`, `cx2`, `x2`, `y2`, `p2`, där (`x1`,`y1`) är startpositionen, `p1` är trycket vid start, (`x2`,`y2`) är slutpositionen, `p2` är trycket vid slutet. (`cx1`,`cy1`) och (`cx2`,`cy2`) är positionerna för styrpunkterna.

  - Funktion: `paintEllipse`

    Funktion ritar en ellips. Den har fem argument: `x1`, `y1`, `x2`, `y2`, `tryck`, där (`x1`,`y1`) och (`x2`,`y2`) är positionerna för de två centra.

  - Funktion: `paintPolygon`

    Funktionen ritar en polygon. Den har två argument: en lista med x-positioner och en lista med y-positioner.

  - Funktion: `paintRect`

    Funktionen ritar en rektangel. Den har fem argument: `x`, `y`, `bredd` `höjd`, `tryck`.

  - Funktion: `paintAt`

    Funktionen målar en given position. Den har tre argument: `x`, `y`, `tryck`.

  - Funktion: `setPaintColor`

    Funktionen ställer in målarfärgen (också kallad förgrundsfärgen). Den har ett argument: en färg (`Color`).

  - Funktion: `setBackgroundColor`

    Funktionen ställer in bakgrundsfärgen. Den har ett argument: en färg (`Color`).

  - Funktion: `setPattern`

    Funktionen ställer in mönstret som används att fylla med. Den har ett argument: ett mönsterobjekt (`Pattern`).

  - Funktion: `setBrush`

    Funktionen ställer in penseln som används att måla med. Den har ett argument: ett penselobjekt (`Brush`).

  - Funktion: `setPaintOp`

    Funktionen definierar en målningsoperation. Den har ett argument: målningsoperationens namn.

  - Funktion: `setDuplicateOffset`

    Funktionen definierar duplikatets förskjutning. Den har två argument: horisontell förskjutning och vertikal förskjutning.

  - Funktion: `setOpacity`

    Funktionen ställer in målningens ogenomskinlighet. Den har ett argument: ogenomskinligheten i intervallet 0 till 255.

  - Funktion: `setStrokeStyle`

    Funktionen ställer in streckets stil. Den har ett argument: 0 för inget, eller 1 för pensel.

  - Funktion: `setFillStyle`

    Funktionen ställer in fyllstilen för målningsobjektet (`Painter`). Den har ett argument: 0 för ingen, 1 för fyll med förgrundsfärg, 2 för fyll med bakgrundsfärg, 3 för fyll med mönster.

- Objekt: `Iterator`

  Objektet låter dig ändra bildpunktsvärden ett i taget. Namnet på vissa funktioner beror på färgrymden, om lagrets färgrymd till exempel är RGB, finns `setR`, `setG` och `setB`, och för CMYK, `setC`, `setM`, `setY` och `setK`. I dokumentationen antar vi att färgrymden kallas ABC, med tre kanaler: A, B, C.

  - Funktioner: `setA`, `setB`, `setC`

    Dessa funktioner har ett argument: det nya värdet för en av bildpunktens kanaler.

  - Funktion: `setABC`

    Ställer in alla kanalers värde. Funktionen har ett argument: ett fält med de nya värdena för alla kanaler.

  - Funktion `getA`, `getB`, `getC`

    Returnera värdet för en av kanalerna i den här bildpunkten.

  - Funktion: `getABC`

    Returnera ett fält med alla kanalers värden.

  - Funktion: `darken`

    Gör en bildpunkt mörkare. Funktionen har minst ett argument: `skugga` (värdet som används för att göra alla färgkanaler mörkare). Funktionen kan ha följande valfria argument: `kompensation` (för att begränsa mörknandet).

  - Funktion: `invertColor`

    Invertera färgen för en bildpunkt.

  - Funktion: `next`

    Öka positionen, och gå till nästa bildpunkt.

  - Funktion: `isDone`

    Returnera sant om iteratorn är i slutet (inga fler bildpunkter är tillgängliga).

## Resurser

Här är tips eller partiella listor med resurser för &chalk;.

För pensel (`Brush`) och mönster (`Pattern`): Du kan hämta namn och tillhörande pensel eller mönster från markeringsverktyget i &chalk;s verktygsrad.

En lista med identifierare av färgrymder i &chalk; 1.5: LABA, RGBA, RGBA16, RGBAF32, RGBAF16HALF, LMSAF32, GRAYA, GRAYA16, CMYK, CMYKA16.