Category:Action! Bitmap tools: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 50:
IF ptr THEN
ptr^=c
FI
RETURN
 
MODULE</lang>
 
----
 
=== RGBIMAGE.ACT ===
 
The following module contains definition of RGB color image.
 
<lang Action!>MODULE
 
DEFINE RGBSIZE="3"
 
TYPE RGB=[BYTE r,g,b]
 
TYPE RgbImage=[
BYTE w,h
CARD data]
 
BYTE FUNC RgbEqual(RGB POINTER c1,c2)
IF c1.r=c2.r AND c1.g=c2.g AND c1.b=c2.b THEN
RETURN (1)
FI
RETURN (0)
 
PROC RgbBlack(RGB POINTER c)
c.r=0 c.g=0 c.b=0
RETURN
 
PROC RgbWhite(RGB POINTER c)
c.r=255 c.g=255 c.b=255
RETURN
 
PROC RgbRed(RGB POINTER c)
c.r=255 c.g=0 c.b=0
RETURN
 
PROC RgbGreen(RGB POINTER c)
c.r=0 c.g=255 c.b=0
RETURN
 
PROC RgbBlue(RGB POINTER c)
c.r=0 c.g=0 c.b=255
RETURN
 
PROC RgbYellow(RGB POINTER c)
c.r=255 c.g=255 c.b=0
RETURN
 
PROC RgbViolet(RGB POINTER c)
c.r=255 c.g=0 c.b=255
RETURN
 
PROC InitRgbImage(RgbImage POINTER img
BYTE width,height CARD d)
 
img.w=width
img.h=height
img.data=d
RETURN
 
PROC FillRgbImage(RgbImage POINTER img RGB POINTER c)
RGB POINTER ptr
BYTE x,y
 
ptr=img.data
FOR y=1 TO img.h
DO
FOR x=1 TO img.w
DO
ptr.r=c.r
ptr.g=c.g
ptr.b=c.b
ptr==+3
OD
OD
RETURN
 
CARD FUNC GetRgbPtr(RgbImage POINTER img INT x,y)
IF x<0 OR x>=img.w OR y<0 OR y>=img.h THEN
RETURN (0)
FI
RETURN (img.data+(x+y*img.w)*RGBSIZE)
 
PROC GetRgbPixel(RgbImage POINTER img
INT x,y RGB POINTER c)
RGB POINTER ptr
ptr=GetRgbPtr(img,x,y)
IF ptr THEN
c.r=ptr.r
c.g=ptr.g
c.b=ptr.b
ELSE
Break()
FI
RETURN
 
PROC SetRgbPixel(RgbImage POINTER img
INT x,y RGB POINTER c)
RGB POINTER ptr
ptr=GetRgbPtr(img,x,y)
IF ptr THEN
ptr.r=c.r
ptr.g=c.g
ptr.b=c.b
FI
RETURN
Anonymous user