# Guiones

En &krita; puede escribir guiones en Ruby o en Python (la disponibilidad de los intérpretes puede depender de las distribuciones o del administrador de la máquina). Aquí tiene una descripción de la API para los guiones.

Junto con &krita; se distribuyen algunos ejemplos, que puede encontrar en `/usr/share/apps/krita/scripts` (o `/opt/kde/share/apps/krita/scripts`).

## Variables del módulo `Krosskritacore`

- `KritaDocument` devuelve un objeto `Document`

- `KritaScript` devuelve un objeto `ScriptProgress`

Puede recuperar un objeto usando la función `get` del módulo `Krosskritacore`. En Ruby se debe escribir algo como esto:

    doc = Krosskritacore::get("KritaDocument")
    script = Krosskritacore::get("KritaScript")

## Funciones del módulo `Krosskritacore`

- Función: `getBrush`

  Esta función devuelve un objeto brocha (`Brush`) de la lista de recursos de &krita;. Devuelve un argumento: el nombre de la brocha. Por ejemplo (en Ruby):

      Krosskritacore::getBrush("Circle (05)")

- Función: `getFilter`

  Esta función devuelve un filtro (`Filter` ) de la lista de recursos de &krita;. Recibe un argumento: el nombre del filtro. Por ejemplo (en Ruby):

      Krosskritacore::getFilter("invert")

- Función: `getPattern`

  Esta función devuelve un patrón (`Pattern`) de la lista de recursos de &krita;. Recibe un argumento: el nombre del patrón. Por ejemplo (en Ruby):

      Krosskritacore::getPattern("Bricks")

- Función: `loadBrush`

  Esta función carga una brocha (`Brush`) y la devuelve. Recibe un argumento: el nombre del archivo de la brocha.

- Función: `loadPattern`

  Esta función carga un patrón (`Pattern`) y luego lo devuelve. Recibe un argumento: el nombre del archivo del patrón.

- Función: `newCircleBrush`

  Esta función devuelve una brocha (`Brush`) con una forma circular. Recibe al menos dos argumentos: anchura y altura. Puede recibir otros dos argumentos: anchura de la sombra y altura de la sombra. Si no se indica la sombra, no se utiliza. Por ejemplo (en Ruby):

      Krosskritacore::newCircleBrush(10,20) # create a plain circle
      Krosskritacore::newCircleBrush(10,20,5,10) # create a gradient

- Función: `newHSVColor`

  Esta función devuelve un `Color` con la tripleta HSV dada. Recibe tres argumentos: componente de tinte (0 a 255), componente de saturación (0 a 255), componente de valor (0 a 255). Por ejemplo (en Ruby):

      Krosskritacore::newHSVColor(255,125,0)

- Función: `newImage`

  Esta función devuelve una imagen (`Image`) nueva. Recibe cuatro argumentos: anchura, altura, id. del espacio de colores, nombre de la imagen. Y devuelve un objeto de imagen (`Image`). Por ejemplo (en Ruby):

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

- Función: `newRectBrush`

  Esta función devuelve una brocha (`Brush`) con una forma rectangular. Devuelve al menos dos argumentos: anchura y altura. Puede recibir otros dos argumentos: anchura de la sombra y altura de la sombra. Si no se indica la sombra, no se utiliza. Por ejemplo (en Ruby):

      Krosskritacore::newRectBrush(10,20) # create a plain rectangle
       Krosskritacore::newRectBrush(10,20,5,10) # create a gradient

- Función: `newRGBColor`

  Esta función devuelve un `Color` nuevo con la tripleta RGB dada. Recibe tres argumentos: componente de rojo (del 0 al 255), componente de azul (del 0 al 255), componente de verde (del 0 al 255). Por ejemplo (en Ruby):

      Krosskritacore::newRGBColor(255,0,0) # create a red color
      Krosskritacore::newRGBColor(255,255,255) # create a white color

## Descripciones y listas de funciones para varios objetos de `Krosskritacore`

- Objeto: PaintLayer

  - Función: `beginPainting`

  - Función: `convertToColorspace`

    Convierte la imagen en un espacio de colores. Esta función recibe un argumento: el nombre del espacio de colores destino. Por ejemplo (en Ruby):

        image.convertToColorspace("CMYK")

  - Función: `createHistogram`

    Esta función crea un histograma para esta capa. Recibe dos argumentos: el tipo de histograma ("RGB8HISTO"), y 0 si el histograma es lineal, o 1 si es logarítmico.

  - Función: `createHLineIterator`

    Crea un iterador sobre una capa, e itera sobre una fila. Esta función recibe tres argumentos: `x` (empezar en la fila), `y` (posición vertical de la fila), anchura de la fila.

  - Función: `createPainter`

    Esta función crea un pintor (`Painter`), que permite pintar sobre la capa.

  - Función: `createRectIterator`

    Crea un iterador sobre una capa, e itera sobre un área rectangular. Esta función recibe cuatro argumentos: `x`, `y`, anchura del rectángulo, anchura del rectángulo.

  - Función: `createVLineIterator`

    Crea un iterador sobre una capa e itera sobre una columna. Esta función recibe tres argumentos: `x` (posición horizontal de la columna), `y` (inicio de la columna), altura de la columna.

  - Función: `endPainting`

    Esta función cierra la entrada de deshacer y la añade al historial.

  - Función: `fastWaveletTransformation`

    Devuelve la transformación de onda rápida de la capa.

  - Función: `fastWaveletUntransformation`

    Deshace la transformación de onda rápida de la capa. Recibe un argumento: un objeto de onda. Por ejemplo (en Ruby):

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

  - Función: `getHeight`

    Devuelve la altura de la capa.

  - Función: `getWidth`

    Devuelve la altura de la capa.

- Objeto: `Filter`

  - Función: `getFilterConfiguration`

    Esta función devuelve la configuración (`FilterConfiguration`) asociada con el filtro.

  - Función: `process`

    Esta función aplica el filtro. Recibe al menos un argumento: la capa de origen. También puede utilizar estos cuatro argumentos: `x`, `y`, `anchura`, `altura`. (`x`,`y`,`anchura`,`altura`) define el área rectangular en la que se debe computar el filtro. Si el rectángulo no está definido, el filtro se aplicará a toda la capa de origen. Por ejemplo (en Ruby)

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

- Objeto: `FilterConfiguration`

  - Función: `getProperty`

    Esta función devuelve el valor de un parámetro del filtro (`Filter`) asociado. Recibe un argumento: el nombre del parámetro.

  - Función: `setProperty`

    Esta función define un parámetro del filtro (`Filter`) asociado. Recibe dos argumentos: el nombre del parámetro y el valor, cuyos tipos dependen del filtro (`Filter`).

- Objeto: `Histogram`

  Esta clase le permite acceder al histograma de una capa de pintura (`PaintLayer`). Ejemplo (en Ruby):

      doc = krosskritacore::get("KritaDocument")
       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

  - Función: `getChannel`

    Devuelve el canal seleccionado.

  - Función: `getCount`

    Devuelve el número de píxeles que utiliza el histograma.

  - Función: `getHighest`

    Devuelve el valor más alto del histograma.

  - Función: `getLowest`

    Devuelve el valor más bajo del histograma.

  - Función: `getMax`

    Devuelve el límite máximo del histograma (los valores de posiciones mayores que el máximo son nulos). El valor está en el rango 0.0 – 1.0.

  - Función: `getMean`

    Devuelve la media del histograma.

  - Función: `getMin`

    Devuelve el límite mínimo del histograma (los valores de posiciones menores que el mínimo son nulos). El valor está en el rango 0.0 – 1.0.

  - Función: `getNumberOfBins`

    Devuelve el número de cubos del histograma.

  - Función: `getTotal`

    Devuelve la suma de todos los valores del histograma.

  - Función: `getValue`

    Devuelve el valor de un cubo del histograma. Recibe un argumento: índice, dentro del rango [0..255].

  - Función: `setChannel`

    Selecciona el canal de la capa sobre el que se quiere obtener el histograma. Recibe un argumento: el número del canal.

- Objeto: `ScriptProgress`

  `ScriptProgress` se utiliza para gestionar la barra de progreso de la barra de estado de &krita;. Por ejemplo (en Ruby):

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

  - Función: `incProgress`

    Incrementa en un paso la barra de progreso.

  - Función: `setProgress`

    Define el valor del progreso. Recibe un argumento: el valor del progreso.

  - Función: `setProgressStage`

    Define el valor del progreso y muestra el texto.

  - Función: `setProgressTotalSteps`

    Define el número de pasos que necesita el guión. Recibe un argumento: el valor máximo del progreso.

- Objeto: `Wavelet`

  Este objeto mantiene los coeficientes de una transformación de onda de una `PaintLayer`.

  - Función: `getDepth`

    Devuelve la profundidad de la capa.

  - Funcción: `getNCoeff`

    Devuelve el valor del coeficiente N-ésimo. La función toma un argumento: el índice del coeficiente.

  - Función: `getNumCoeffs`

    Devuelve el número de coeficientes en esta onda (= tamaño * tamaño * profundidad).

  - Función: `getSize`

    Devuelve el tamaño de la onda (tamaño = anchura = altura).

  - Funcción: `getXYCoeff`

    Devuelve el valor de un coeficiente. La función toma dos argumentos: `x` e `y`.

  - Función: `setNCoeff`

    Establece el valor N-ésimo. La función toma dos argumentos: el índice del coeficiente y el valor nuevo del coeficiente.

  - Función: `setXYCoeff`

    Establece el valor de un coeficiente. La función toma tres argumentos: `x`, `y` y el valor nuevo del coeficiente.

- Objecto: `Painter`

  - Función: `convolve`

    Esta función aplica un módulo de convolución a una imagen. Toma al menos tres argumentos: un lista de módulos (todas las listas necesitan tener el mismo tamaño), factor y desplazamiento.

    El valor de un pixel será el dado por la siguiente función: K * P / factor + desplazamiento, donde K es el módulo y P es el vecino.

    Puede tomar los siguientes argumentos opcionales: `borderOp` (controla cómo convolucionar los pixels en el borde de una imagen: 0 = utiliza el color predeterminado, 1 = utiliza el pixel del lado opuesto de la imagen, 2 = utiliza el pixel del borde, 3 = evitar los pixels del borde), `canal` (1 para color, 2 para alfa, 3 para ambos), `x`, `y`, `anchura`, `altura`.

  - Función: `setFillThreshold`

    Establece el umbral de relleno. Toma un argumento: el umbral.

  - Función: `fillColor`

    Inicia el relleno con un color. Toma dos argumentos: `x` e `y`.

  - Función: `fillPattern`

    Inicia el relleno con un patrón. Toma dos argumentos: `x` e `y`.

  - Función: `paintPolyline`

    Esta función dibujará una línea poligonal. Toma dos argumentos: una lista de posiciones x, y una lista de posiciones y.

  - Función: `paintLine`

    Esta función dibujará una línea. Toma cinco argumentos: `x1`, `y1`, `x2`, `y2` y `presión`.

  - Función: `paintBezierCurve`

    Esta función dibujará una curva de Bezier. Toma diez argumentos: `x1`, `y1`, `p1`, `cx1`, `cy1`, `cx2`, `cx2`, `x2`, `y2`, `p2`, donde (`x1`,`y1`) es la posición de partida, `p1` es la presión de partida, (`x2`,`y2`) es la posición final, `p2` es la presión final. (`cx1`,`cy1`) y (`cx2`,`cy2`) son las posiciones de los puntos de control.

  - Función: `paintEllipse`

    Esta función dibujará una elipse. Toma cinco argumentos: `x1`, `y1`, `x2`, `y2`, `presión`, dónde (`x1`,`y1`) y (`x2`,`y2`) son las posiciones de los dos centros.

  - Función: `paintPolygon`

    Esta función diburá un polígono. Toma dos argumentos: una lista de posiciones x y otra lista de posiciones y.

  - Función: `paintRect`

    Esta función dibujará un rectángulo. Toma cinco argumentos: `x`, `y`, `anchura` `altura`, `presión`.

  - Función: `paintAt`

    Esta función dibujará en la posición dada. Toma tres argumentos: `x`, `y`, `presión`.

  - Función: `setPaintColor`

    Esta función establece el color de dibujo (también llamado color del primer plano). Toma un argumento: un `Color`.

  - Función: `setBackgroundColor`

    Esta función establece el color del fondo. Toma un argumento: un `Color`.

  - Function: `setPattern`

    Esta función establece el patrón utilizado para rellenar. Toma un argumento: un objeto `Pattern`.

  - Función: `setBrush`

    Esta función establece la brocha utilizada para dibujar. Toma una argumento: un objeto `Brush`.

  - Función: `setPaintOp`

    Esta función define la operación de dibujo. Toma un argumento: el nombre de la operación de dibujo.

  - Función: `setDuplicateOffset`

    Esta función define el desplazamiento duplicado. Toma dos argumentos: el desplazamiento horizontal y el desplazamiento vertical.

  - Función: `setOpacity`

    Esta función establece la opacidad del dibujado. Toma un argumento: la opacidad, con un rango entre 0 y 255.

  - Función: `setStrokeStyle`

    Esta función establece el estilo del trazo. Toma un argumento: 0 para ninguno ó 1 para brocha.

  - Función: `setFillStyle`

    Esta función establece el estilo de relleno de `Painter`. Toma un argumento: 0 para ninguno, 1 para rellenar con el color del primer plano, 2 para rellenar con el color del fondo, 3 para rellenar con un patrón.

- Objecto: `Iterator`

  Este objeto le permite cambiar los valores de los pixels uno a uno. El nombre de algunas funciones depende del espacio de color, por ejemplo, si el espacio de color de la capa de color es RGB, tiene `setR`, `setG` y `setB`, y para CMYK: `setC`, `setM`, `setY` y `setK`. En la documentación siguiente asumiremos que el espacio de color se llama ABC, con tres canales. A, B y C.

  - Funciones: `setA`, `setB`, `setC`

    Estas funciones toma un argumento: el valor nuevo de uno de los canales de este pixel.

  - Función: `setABC`

    Establece el valor de todos los canales. Esta función toma un argumento: una matriz con los valores nuevos para todos los canales.

  - Funciones: `getA`, `getB`, `getC`

    Devuelve el valor de uno de los canales de este pixel.

  - Función: `getABC`

    Devuelve una matriz con los valores de todos los canales.

  - Función: `darken`

    Oscurece un pixel. Esta función toma al menos un argumento: `oscuridad` (cantidad utilizada para oscurecer todos los canales de color). Esta función puede tomar el siguiente argumento opcional: `compensación` (para limitar el oscurecimiento).

  - Función: `invertColor`

    Invierte el color de un pixel.

  - Función: `next`

    Incrementa la posición, va al siguiente pixel.

  - Función: `isDone`

    Devuelve verdadero es el iterador está al final (no hay más pixels disponibles).

## Recursos

Aquí hay sugerencias o listas parciales de recursos para &krita;.

Para `Brush` y `Pattern`: Puede obtener el nombre y la brocha o patrón asociados desde el selector de la barra de herramientas de &krita;.

Un lista de identificadores de los espacios de color en &krita;: LABA, RGBA, RGBA16, RGBAF32, RGBAF16HALF, LMSAF32, GRAYA, GRAYA16, CMYK, CMYKA16.