123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- * The Python Imaging Library
- * $Id$
- *
- * fill image with constant pixel value
- *
- * history:
- * 95-11-26 fl moved from Imaging.c
- * 96-05-17 fl added radial fill, renamed wedge to linear
- * 98-06-23 fl changed ImageFill signature
- *
- * Copyright (c) Secret Labs AB 1997-98. All rights reserved.
- * Copyright (c) Fredrik Lundh 1995-96.
- *
- * See the README file for information on usage and redistribution.
- */
- #include "Imaging.h"
- #include "math.h"
- Imaging
- ImagingFill(Imaging im, const void* colour)
- {
- int x, y;
- ImagingSectionCookie cookie;
- if (im->type == IMAGING_TYPE_SPECIAL) {
- /* use generic API */
- ImagingAccess access = ImagingAccessNew(im);
- if (access) {
- for (y = 0; y < im->ysize; y++)
- for (x = 0; x < im->xsize; x++)
- access->put_pixel(im, x, y, colour);
- ImagingAccessDelete(im, access);
- } else {
- /* wipe the image */
- for (y = 0; y < im->ysize; y++)
- memset(im->image[y], 0, im->linesize);
- }
- } else {
- INT32 c = 0L;
- ImagingSectionEnter(&cookie);
- memcpy(&c, colour, im->pixelsize);
- if (im->image32 && c != 0L) {
- for (y = 0; y < im->ysize; y++)
- for (x = 0; x < im->xsize; x++)
- im->image32[y][x] = c;
- } else {
- unsigned char cc = (unsigned char) *(UINT8*) colour;
- for (y = 0; y < im->ysize; y++)
- memset(im->image[y], cc, im->linesize);
- }
- ImagingSectionLeave(&cookie);
- }
- return im;
- }
- Imaging
- ImagingFillLinearGradient(const char *mode)
- {
- Imaging im;
- int y;
- if (strlen(mode) != 1) {
- return (Imaging) ImagingError_ModeError();
- }
- im = ImagingNewDirty(mode, 256, 256);
- if (!im) {
- return NULL;
- }
- for (y = 0; y < 256; y++) {
- memset(im->image8[y], (unsigned char) y, 256);
- }
- return im;
- }
- Imaging
- ImagingFillRadialGradient(const char *mode)
- {
- Imaging im;
- int x, y;
- int d;
- if (strlen(mode) != 1) {
- return (Imaging) ImagingError_ModeError();
- }
- im = ImagingNewDirty(mode, 256, 256);
- if (!im) {
- return NULL;
- }
- for (y = 0; y < 256; y++) {
- for (x = 0; x < 256; x++) {
- d = (int) sqrt((double) ((x-128)*(x-128) + (y-128)*(y-128)) * 2.0);
- if (d >= 255) {
- im->image8[y][x] = 255;
- } else {
- im->image8[y][x] = d;
- }
- }
- }
- return im;
- }
|