Skip to content

Latest commit

 

History

History
314 lines (235 loc) · 6.93 KB

image.adoc

File metadata and controls

314 lines (235 loc) · 6.93 KB

Datový typ image!

1. Úvodem

Hodnoty typu image! obsahují řady (series!) hodnot RGBA, které reprezentují pixely ve 2D zobrazení. 2D je na 1D prostor mapován tak, že se bere bere první řada pixelů zleva doprava, potom druhá řada a tak dále.

Typ image! je člen těchto typesetů: any-type!, default! a series!.

2. Vytvoření

Hodnoty typu image! lze vytvořit při běhu programu (runtime) s použitím konstruktoru make a konverzí to.

2.1. Deklarace pro runtime

<image> ::= make image! <image-spec>
<image-spec> ::= <pair> | [<pair> <tuple>] | [<pair> <binary> <binary>°]

Má-li <image-spec> formát pair! nebo [pair!], definuje pár (pair) velikost zobrazení a hodnoty RGB jsou nastaveny na 255 a hodnota Alfa je nastavena na 0.

>> make image! 1x1
== make image! [1x1 #{FFFFFF}]
>> make image! [1x1]
== make image! [1x1 #{FFFFFF}]

Má-li <image-spec> formát [pair! tuple!], definuje pár velikost zobrazení, tuple definuje počáteční barvu RGB a průhlednost (opacity) všech pixelů.

Note
Uložení obrázku ve formátu .png zachovává zadanou průhlednost, např.: save/as %img.png img 'png

Deklarace s RGB. Implicitně je nastavena plná průhlednost (0):

>> img: make image! [1x1 255.210.0]
== make image! [1x1 #{FFD200}]

Deklarace s RGB a kanálem Alpha (RGBA):

>> img: make image! [1x1 255.210.0.42]
== make image! [1x1 #{FFD200} #{
2A}]

Má-li <image-spec> formát [pair! binary! binary!], definuje pár velikost zobrazení, první binární hodnota definuje počáteční barvu v RGB pro všechny pixely a druhá binární hodnota definuje počáteční průhlednost obrázku.

>> img: make image! [1x1 #{FFD200} #{2A}]
== make image! [1x1 #{FFD200} #{
2A}]
Note
Při použití hodnoty typu binary!, musíte binární hodnotu opakovat shodně s velikostí obrázku. Počet opakování dává součin hodnot, udávajících velikost zobrazení.

Příklady

>> make image! [2x2 #{FFD200FFD200FFD200FFD200} #{2A2A2A2A}]
== make image! [2x2#{FFD200FFD200FFD200FFD200}#{2A2A2A2A}]
   ; hodnoty RGB a A v binárním čísle opakovány 2 * 2 krát

Nejsou-li binární hodnoty opakovány, doplňují se nulami na stejnou délku, jakou by měly byvše opakované:

>> make image! [2x2 #{FFD200} #{2A}]
== make image! [2x2 #{FFD200000000000000000000} #{
2A000000}]
>> make image! [2x2 255.210.0.42]
== make image! [2x2 #{FFD200FFD200FFD200FFD200} #{ 2A2A2A2A}]
   ; hodnoty RGB a A v binárním čísle opakovány 2 * 2 krát

>> make image! [2x3 255.210.0.42]
== make image! [2x3 #{FFD200FFD200FFD200FFD200FFD200FFD200} #{
2A2A2A2A2A2A}]
   ; hodnoty RGB a A v binárním čísle opakovány 2 * 3 krát

3. Komponenty zobrazení

3.1. /alpha

Vrací nebo nastaví hodnotu kanálu Alpha.

Příklady

>> img/alpha
== #{2A}
>> img/alpha: 210
== 210

>> img/alpha
== #{D2}

3.2. /argb

Vrací nebo nastaví hodnoty Alpha a RGB.

Příklady

>> img: make image! [1x1 255.210.0.120]
== make image! [1x1 #{FFD200} #{78}]

>> img/argb
== #{00D2FF87}
>> img/argb: 255.255.210.0
== 255.255.210.0

>> img/argb
== #{D2FFFFFF}

3.3. /rgb

Vrací nebo nastaví hodnoty RGB.

Examples

>> img: make image! [1x1 255.210.0.120]
== make image! [1x1 #{FFD200} #{78}]

>> img/rgb
== #{FFD200}
>> img/rgb: 255.255.255
== 255.255.255

>> img/rgb
== #{FFFFFF}

3.4. /size

Vrací velikost zobrazení jako hodnotu typu pair!

Příklad

>> img/size
== 1x1

4. Manipulace

Hodnotou typu image! lze manipulovat jako typeseten series!:

>> a: make image! [2x2 #{111111222222333333444444}]
== make image! [2x2 #{111111222222333333444444}]

>> copy/part a 1
== make image! [1x1 #{111111}]

>> copy/part a 2
== make image! [2x1 #{111111222222}]

Někdy může být objekt typu image! interpretován jako 2D series!:

>> a: make image! [2x2 #{111111222222333333444444}]
== make image! [2x2 #{111111222222333333444444}]

>> copy/part a 1x2
== make image! [1x2 #{111111333333}]

>> copy/part a 2x1
== make image! [2x1 #{111111222222}]

5. Konverze

Funkce to image! konvertuje objekty Red/View typu face! na hodnoty typu image!.

>> lay: layout [button "Hi there!"]
== make object! [
    type: 'window
    offset: none
    size: 83x45
    text: none
    image: none
    color: none
    menu: none
    data:...

>> view/no-wait lay
== make object! [
    type: 'window
    offset: 644x386
    size: 126x45
    text: "Red: untitled"
    image: none
    color: none
    menu:...

>> to image! lay
== make image! [132x73 #{
    0000000000000000000000004D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D
    4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4...

6. Testování hodnot

Ke zjištění, zda hodnota je typu image! použijeme funkci image?.

>> image? img         ; zde Script Error: img has no value

Typ dané hodnoty zjistíme dotazem type?.

>> type? img          ; zde Script Error: img has no value

7. Předdefinovaná slova

Slova, odkazující na příslušné hodnoty typu tuple!:

>> help tuple!
    Red              255.0.0
    white            255.255.255
    transparent      0.0.0.255
    gray             128.128.128
    aqua             40.100.130
    beige            255.228.196
    black            0.0.0
    blue             0.0.255
    brick            178.34.34
    brown            139.69.19
    coal             64.64.64
    coffee           76.26.0
    crimson          220.20.60
    cyan             0.255.255
    forest           0.48.0
    gold             255.205.40
    green            0.255.0
    ivory            255.255.240
    khaki            179.179.126
    leaf             0.128.0
    linen            250.240.230
    magenta          255.0.255
    maroon           128.0.0
    mint             100.136.116
    navy             0.0.128
    oldrab           72.72.16
    olive            128.128.0
    orange           255.150.10
    papaya           255.80.37
    pewter           170.170.170
    pink             255.164.200
    purple           128.0.128
    reblue           38.58.108
    rebolor          142.128.110
    sienna           160.82.45
    silver           192.192.192
    sky              164.200.255
    snow             240.240.240
    tanned           222.184.135
    teal             0.128.128
    violet           72.0.90
    water            80.108.142
    wheat            245.222.129
    yello            255.240.120
    yellow           255.255.0
    glass            0.0.0.255

Tato slova lze použít místo literálových hodnot entice (tuple), na něž jsou při runtime redukovány:

>> img: make image! reduce [1x1 red]
== make image! [1x1 #{FF0000}]

Toto je totéž s použitím literálových hodnot entice:

>> img: make image! [1x1 255.0.0]
== make image! [1x1 #{FF0000}]

7.1. Funkce

draw, image?, layout, series?, to-image