Category:Action! Bitmap tools: Difference between revisions

Content added Content deleted
No edit summary
No edit summary
Line 50: Line 50:
IF ptr THEN
IF ptr THEN
ptr^=c
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
FI
RETURN
RETURN