123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- .TH ALLOCIMAGE 2
- .SH NAME
- allocimage, allocimagemix, freeimage, nameimage, namedimage, setalpha, loadimage, cloadimage, unloadimage, readimage, writeimage, bytesperline, wordsperline \- allocating, freeing, reading, writing images
- .SH SYNOPSIS
- .nf
- .PP
- .B
- #include <u.h>
- .B
- #include <libc.h>
- .B
- #include <draw.h>
- .PP
- .ta \w'\fLImage 'u
- .B
- Image *allocimage(Display *d, Rectangle r,
- .br
- .B
- ulong chan, int repl, int col)
- .PP
- .B
- Image *allocimagemix(Display *d, ulong one, ulong three)
- .PP
- .B
- void freeimage(Image *i)
- .PP
- .B
- int nameimage(Image *i, char *name, int in)
- .PP
- .B
- Image *namedimage(Display *d, char *name)
- .PP
- .B
- ulong setalpha(ulong color, uchar alpha)
- .PP
- .B
- int loadimage(Image *i, Rectangle r, uchar *data, int ndata)
- .PP
- .B
- int cloadimage(Image *i, Rectangle r, uchar *data, int ndata)
- .PP
- .B
- int unloadimage(Image *i, Rectangle r, uchar *data, int ndata)
- .PP
- .B
- Image *readimage(Display *d, int fd, int dolock)
- .PP
- .B
- int writeimage(int fd, Image *i, int dolock)
- .PP
- .B
- int bytesperline(Rectangle r, int d)
- .PP
- .B
- int wordsperline(Rectangle r, int d)
- .PP
- .nf
- .B
- enum
- .nf
- .ft L
- .ta +4n +20
- {
- DOpaque = 0xFFFFFFFF,
- DTransparent = 0x00000000,
- DBlack = 0x000000FF,
- DWhite = 0xFFFFFFFF,
- DRed = 0xFF0000FF,
- DGreen = 0x00FF00FF,
- DBlue = 0x0000FFFF,
- DCyan = 0x00FFFFFF,
- DMagenta = 0xFF00FFFF,
- DYellow = 0xFFFF00FF,
- DPaleyellow = 0xFFFFAAFF,
- DDarkyellow = 0xEEEE9EFF,
- DDarkgreen = 0x448844FF,
- DPalegreen = 0xAAFFAAFF,
- DMedgreen = 0x88CC88FF,
- DDarkblue = 0x000055FF,
- DPalebluegreen = 0xAAFFFFFF,
- DPaleblue = 0x0000BBFF,
- DBluegreen = 0x008888FF,
- DGreygreen = 0x55AAAAFF,
- DPalegreygreen = 0x9EEEEEFF,
- DYellowgreen = 0x99994CFF,
- DMedblue = 0x000099FF,
- DGreyblue = 0x005DBBFF,
- DPalegreyblue = 0x4993DDFF,
- DPurpleblue = 0x8888CCFF,
- DNotacolor = 0xFFFFFF00,
- DNofill = DNotacolor,
-
- };
- .fi
- .SH DESCRIPTION
- A new
- .B Image
- on
- .B Display
- .B d
- is allocated with
- .BR allocimage ;
- it will have the rectangle, pixel channel format,
- and replication flag
- given by its arguments.
- Convenient pixel channels like
- .BR GREY1 ,
- .BR GREY2 ,
- .BR CMAP8 ,
- .BR RGB16 ,
- .BR RGB24 ,
- and
- .BR RGBA32
- are predefined.
- All the new image's pixels will have initial value
- .IR col .
- If
- .I col
- is
- .BR DNofill ,
- no initialization is done.
- Representative useful values of color are predefined:
- .BR DBlack ,
- .BR DWhite ,
- .BR DRed ,
- and so on.
- Colors are specified by 32-bit numbers comprising,
- from most to least significant byte,
- 8-bit values for red, green, blue, and alpha.
- The values correspond to illumination, so 0 is black and 255 is white.
- Similarly, for alpha 0 is transparent and 255 is opaque.
- The
- .I id
- field will have been set to the identifying number used by
- .B /dev/draw
- (see
- .IR draw (3)),
- and the
- .I cache
- field will be zero.
- If
- .I repl
- is true, the clip rectangle is set to a very large region; if false, it is set to
- .IR r .
- The
- .I depth
- field will be set to the number of bits per pixel specified
- by the channel descriptor
- (see
- .IR image (6)).
- .I Allocimage
- returns 0 if the server has run out of image memory.
- .PP
- .I Allocimagemix
- is used to allocate background colors.
- On 8-bit color-mapped displays, it
- returns a 2×2 replicated image with one pixel colored
- the color
- .I one
- and the other three with
- .IR three .
- (This simulates a wider range of tones than can be represented by a single pixel
- value on a color-mapped display.)
- On true color displays, it returns a 1×1 replicated image
- whose pixel is the result of mixing the two colors in
- a one to three ratio.
- .PP
- .I Freeimage
- frees the resources used by its argument image.
- .PP
- .I Nameimage
- publishes in the server the image
- .I i
- under the given
- .IR name .
- If
- .I in
- is non-zero, the image is published; otherwise
- .I i
- must be already named
- .I name
- and it is withdrawn from publication.
- .I Namedimage
- returns a reference to the image published under the given
- .I name
- on
- .B Display
- .IR d .
- These routines permit unrelated applications sharing a display to share an image;
- for example they provide the mechanism behind
- .B getwindow
- (see
- .IR graphics (2)).
- .PP
- The RGB values in a color are
- .I premultiplied
- by the alpha value; for example, a 50% red is
- .B 0x7F00007F
- not
- .BR 0xFF00007F .
- The function
- .I setalpha
- performs the alpha computation on a given
- .BR color ,
- ignoring its initial alpha value, multiplying the components by the supplied
- .BR alpha .
- For example, to make a 50% red color value, one could execute
- .B setalpha(DRed,
- .BR 0x7F) .
- .PP
- The remaining functions deal with moving groups of pixel
- values between image and user space or external files.
- There is a fixed format for the exchange and storage of
- image data
- (see
- .IR image (6)).
- .PP
- .I Unloadimage
- reads a rectangle of pixels from image
- .I i
- into
- .IR data ,
- whose length is specified by
- .IR ndata .
- It is an error if
- .I ndata
- is too small to accommodate the pixels.
- .PP
- .I Loadimage
- replaces the specified rectangle in image
- .I i
- with the
- .I ndata
- bytes of
- .IR data .
- .PP
- The pixels are presented one horizontal line at a time,
- starting with the top-left pixel of
- .IR r .
- In the data processed by these routines, each scan line starts with a new byte in the array,
- leaving the last byte of the previous line partially empty, if necessary.
- Pixels are packed as tightly as possible within
- .IR data ,
- regardless of the rectangle being extracted.
- Bytes are filled from most to least significant bit order,
- as the
- .I x
- coordinate increases, aligned so
- .IR x =0
- would appear as the leftmost pixel of its byte.
- Thus, for
- .B depth
- 1, the pixel at
- .I x
- offset 165 within the rectangle will be in a
- .I data
- byte at bit-position
- .B 0x04
- regardless of the overall
- rectangle: 165 mod 8 equals 5, and
- .B "0x80\ >>\ 5"
- equals
- .BR 0x04 .
- .PP
- .B Cloadimage
- does the same as
- .IR loadimage ,
- but for
- .I ndata
- bytes of compressed image
- .I data
- (see
- .IR image (6)).
- On each call to
- .IR cloadimage,
- the
- .I data
- must be at the beginning of a compressed data block, in particular,
- it should start with the
- .B y
- coordinate and data length for the block.
- .PP
- .IR Loadimage ,
- .IR cloadimage ,
- and
- .I unloadimage
- return the number of bytes copied.
- .PP
- .I Readimage
- creates an image from data contained in an external file (see
- .IR image (6)
- for the file format);
- .I fd
- is a file descriptor obtained by opening such a file for reading.
- The returned image is allocated using
- .IR allocimage .
- The
- .I dolock
- flag specifies whether the
- .B Display
- should be synchronized for multithreaded access; single-threaded
- programs can leave it zero.
- .PP
- .I Writeimage
- writes image
- .I i
- onto file descriptor
- .IR fd ,
- which should be open for writing.
- The format is as described for
- .IR readimage .
- .PP
- .I Readimage
- and
- .I writeimage
- do not close
- .IR fd .
- .PP
- .I Bytesperline
- and
- .I wordsperline
- return the number of bytes or words occupied in memory by one scan line of rectangle
- .I r
- in an image with
- .I d
- bits per pixel.
- .SH EXAMPLE
- To allocate a single-pixel replicated image that may be used to paint a region red,
- .EX
- red = allocimage(display, Rect(0, 0, 1, 1), RGB24, 1, DRed);
- .EE
- .SH SOURCE
- .B /sys/src/libdraw
- .SH "SEE ALSO"
- .IR graphics (2),
- .IR draw (2),
- .IR draw (3),
- .IR image (6)
- .SH DIAGNOSTICS
- These functions return pointer 0 or integer \-1 on failure, usually due to insufficient
- memory.
- .PP
- May set
- .IR errstr .
- .SH BUGS
- .B Depth
- must be a divisor or multiple of 8.
|