Red Image! Datatype
As many modern languages, Red represents image as a very simple structure:
img: declare struct! [
width [integer!]
height [integer!]
data [pointer!]
]
Both integers give the size of the image and the pointer gives access to the content of the image.
Created and loaded images by Red are in ARGB format where A is the image transparency and RGB each channel for Red, Green and blue value. Red images are 4-channels. Image pixels are represented as tuple!
Images are 8-bit and internally use bytes [0..255] as a binary string of hexadecimal values.
How to create an image with Red
This is trivial, use make image! as for example:
img: make image! reduce [640x480 red]. This instruction creates a 640x480 red pixels image. You'll find in Red documentation (http://www.red-lang.org/p/documentation.html) all information you need for creating simple or sophisticated images.
Now let's try an exemple to generate random images. Basically we create a simple function which can generate a random colour for the whole image or a random value for all pixels of the image according to the refinement of the function. Then the retuned image generated by the function is updated in a base face.
Red [
Title: "Random test "
Author: "Francois Jouen"
File: %random.red
Needs: 'View
]
rcvRandomImage: function [size [pair!] value [tuple!] /uniform /alea return: [image!]
"Create a random uniform or pixel random image"
][
case [
uniform [img: make image! reduce [size random value]]
alea [img: make image! reduce [size black] forall img [img/1: random value ]]
]
img
]
margins: 10x10
; ***************** Test Program ****************************
view win: layout [
title "Rand Tests"
button 80 "Uniform" [canvas/image: rcvRandomImage/uniform 512x512 255.255.255.0]
button 80 "Random" [canvas/image: rcvRandomImage/alea 512x512 255.255.255.0]
button 50 "Quit" [quit]
return
canvas: base 512x512 black
]
Aucun commentaire:
Enregistrer un commentaire