[REBOL] Re: Alpha channel of image! type
From: petr:krenzelok:trz:cz at: 14-Nov-2002 19:00
Hi,
I am not sure I can completly answer your question, but look at least
into following hints:
->> img: load %carlwaves.jpg
== make image! [128x128 #{
66191C681B1E6A1D20671A1D65181B681B1E702326772A2D74272A6A1D20
6114176215186C1F2275282B782B2E732A2C601E1F7...
now you can know each pixel:
->> img/1
== 28.25.102.0
->> img/2
== 30.27.104.0
As you can see, four bytes are used, zero represents value of alpha
channel here ....
But notice, that rebol presents data in BGR reverse format ...
->> to-integer #{66}
== 102
->> to-integer #{19}
== 25
->> to-integer #{1C}
== 28
->> to-integer #{68}
== 104
From above you can see, that alpha channel is not presented in ==make
image! output ....
simple
example of how to change alpha value of image to let's say
value of 100:
->> for i 1 (length? img) / 4 1 [poke img i to-tuple join img/:i/1 ["."
img/:i/2 "." img/:i/3 "." 100]]
->> view layout [image img]
So possibly, as for your example:
R: copy []
G: copy []
B: copy []
A: copy []
for i 1 (length? img) / 4 1 [append R img/:i/1 append G img/:i/2 append
B img/:i/3 append A img/:i/4]
So, that's it ... the code is nice looking and simple, isn't it? The
problem is, that for image manipulation, forget speed. Unless RT adds
compile to at least some areas of usage, you will have to either wait a
bit when manipulating large image, or go for C library, but you would
need /Pro version ...
HTH,
-pekr-
Claude Precourt wrote: