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!
.
Hodnoty typu image! lze vytvořit při běhu programu (runtime) s použitím konstruktoru make
a konverzí to
.
<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
Vrací nebo nastaví hodnotu kanálu Alpha.
Příklady
>> img/alpha
== #{2A}
>> img/alpha: 210
== 210
>> img/alpha
== #{D2}
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}
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}
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}]
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...
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
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}]