root / ImageMagick / trunk / coders / gradient.c

Revision 12625, 9.4 kB (checked in by cristy, 8 days ago)
Line 
1/*
2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3%                                                                             %
4%                                                                             %
5%                                                                             %
6%            GGGG  RRRR    AAA   DDDD   IIIII  EEEEE  N   N  TTTTT            %
7%           G      R   R  A   A  D   D    I    E      NN  N    T              %
8%           G  GG  RRRR   AAAAA  D   D    I    EEE    N N N    T              %
9%           G   G  R R    A   A  D   D    I    E      N  NN    T              %
10%            GGG   R  R   A   A  DDDD   IIIII  EEEEE  N   N    T              %
11%                                                                             %
12%                                                                             %
13%                   Read An Image Filled Using Gradient.                      %
14%                                                                             %
15%                              Software Design                                %
16%                                John Cristy                                  %
17%                                 July 1992                                   %
18%                                                                             %
19%                                                                             %
20%  Copyright 1999-2008 ImageMagick Studio LLC, a non-profit organization      %
21%  dedicated to making software imaging solutions freely available.           %
22%                                                                             %
23%  You may not use this file except in compliance with the License.  You may  %
24%  obtain a copy of the License at                                            %
25%                                                                             %
26%    http://www.imagemagick.org/script/license.php                            %
27%                                                                             %
28%  Unless required by applicable law or agreed to in writing, software        %
29%  distributed under the License is distributed on an "AS IS" BASIS,          %
30%  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
31%  See the License for the specific language governing permissions and        %
32%  limitations under the License.                                             %
33%                                                                             %
34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
35%
36%
37*/
38
39/*
40  Include declarations.
41*/
42#include "magick/studio.h"
43#include "magick/blob.h"
44#include "magick/blob-private.h"
45#include "magick/color.h"
46#include "magick/color-private.h"
47#include "magick/draw.h"
48#include "magick/exception.h"
49#include "magick/exception-private.h"
50#include "magick/image.h"
51#include "magick/image-private.h"
52#include "magick/list.h"
53#include "magick/magick.h"
54#include "magick/memory_.h"
55#include "magick/paint.h"
56#include "magick/pixel-private.h"
57#include "magick/quantum-private.h"
58#include "magick/static.h"
59#include "magick/string_.h"
60#include "magick/module.h"
61#include "magick/studio.h"
62
63/*
64%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65%                                                                             %
66%                                                                             %
67%                                                                             %
68%   R e a d G R A D I E N T I m a g e                                         %
69%                                                                             %
70%                                                                             %
71%                                                                             %
72%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
73%
74%  ReadGRADIENTImage creates a gradient image and initializes it to
75%  the color range as specified by the filename.  It allocates the memory
76%  necessary for the new Image structure and returns a pointer to the new
77%  image.
78%
79%  The format of the ReadGRADIENTImage method is:
80%
81%      Image *ReadGRADIENTImage(const ImageInfo *image_info,
82%        ExceptionInfo *exception)
83%
84%  A description of each parameter follows:
85%
86%    o image_info: the image info.
87%
88%    o exception: return any errors or warnings in this structure.
89%
90*/
91static Image *ReadGRADIENTImage(const ImageInfo *image_info,
92  ExceptionInfo *exception)
93{
94  char
95    colorname[MaxTextExtent];
96
97  PixelPacket
98    start_color,
99    stop_color;
100
101  Image
102    *image;
103
104  /*
105    Initialize Image structure.
106  */
107  assert(image_info != (const ImageInfo *) NULL);
108  assert(image_info->signature == MagickSignature);
109  if (image_info->debug != MagickFalse)
110    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
111      image_info->filename);
112  assert(exception != (ExceptionInfo *) NULL);
113  assert(exception->signature == MagickSignature);
114  image=AcquireImage(image_info);
115  if ((image->columns == 0) || (image->rows == 0))
116    ThrowReaderException(OptionError,"MustSpecifyImageSize");
117  if (SetImageExtent(image,0,0) == MagickFalse)
118    {
119      InheritException(exception,&image->exception);
120      return(DestroyImageList(image));
121    }
122  (void) SetImageOpacity(image,(Quantum) TransparentOpacity);
123  (void) CopyMagickString(image->filename,image_info->filename,MaxTextExtent);
124  (void) CopyMagickString(colorname,image_info->filename,MaxTextExtent);
125  (void) sscanf(image_info->filename,"%[^-]",colorname);
126  if (QueryColorDatabase(colorname,&start_color,exception) == MagickFalse)
127    {
128      image=DestroyImage(image);
129      return((Image *) NULL);
130    }
131  (void) CopyMagickString(colorname,"white",MaxTextExtent);
132  if (PixelIntensityToQuantum(&start_color) > (Quantum) (QuantumRange/2))
133    (void) CopyMagickString(colorname,"black",MaxTextExtent);
134  (void) sscanf(image_info->filename,"%*[^-]-%s",colorname);
135  if (QueryColorDatabase(colorname,&stop_color,exception) == MagickFalse)
136    {
137      image=DestroyImage(image);
138      return((Image *) NULL);
139    }
140  (void) GradientImage(image,LocaleCompare(image_info->magick,"GRADIENT") == 0 ?
141    LinearGradient : RadialGradient,ReflectSpread,&start_color,&stop_color);
142  return(GetFirstImageInList(image));
143}
144
145/*
146%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
147%                                                                             %
148%                                                                             %
149%                                                                             %
150%   R e g i s t e r G R A D I E N T I m a g e                                 %
151%                                                                             %
152%                                                                             %
153%                                                                             %
154%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
155%
156%  RegisterGRADIENTImage() adds attributes for the GRADIENT image format
157%  to the list of supported formats.  The attributes include the image format
158%  tag, a method to read and/or write the format, whether the format
159%  supports the saving of more than one frame to the same file or blob,
160%  whether the format supports native in-memory I/O, and a brief
161%  description of the format.
162%
163%  The format of the RegisterGRADIENTImage method is:
164%
165%      unsigned long RegisterGRADIENTImage(void)
166%
167*/
168ModuleExport unsigned long RegisterGRADIENTImage(void)
169{
170  MagickInfo
171    *entry;
172
173  entry=SetMagickInfo("GRADIENT");
174  entry->decoder=(DecodeImageHandler *) ReadGRADIENTImage;
175  entry->adjoin=MagickFalse;
176  entry->raw=MagickTrue;
177  entry->endian_support=MagickTrue;
178  entry->format_type=ImplicitFormatType;
179  entry->description=ConstantString("Gradual linear passing from one shade to "
180    "another");
181  entry->module=ConstantString("GRADIENT");
182  (void) RegisterMagickInfo(entry);
183  entry=SetMagickInfo("RADIAL-GRADIENT");
184  entry->decoder=(DecodeImageHandler *) ReadGRADIENTImage;
185  entry->adjoin=MagickFalse;
186  entry->raw=MagickTrue;
187  entry->endian_support=MagickTrue;
188  entry->format_type=ImplicitFormatType;
189  entry->description=ConstantString("Gradual radial passing from one shade to "
190    "another");
191  entry->module=ConstantString("GRADIENT");
192  (void) RegisterMagickInfo(entry);
193  return(MagickImageCoderSignature);
194}
195
196/*
197%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
198%                                                                             %
199%                                                                             %
200%                                                                             %
201%   U n r e g i s t e r G R A D I E N T I m a g e                             %
202%                                                                             %
203%                                                                             %
204%                                                                             %
205%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
206%
207%  UnregisterGRADIENTImage() removes format registrations made by the
208%  GRADIENT module from the list of supported formats.
209%
210%  The format of the UnregisterGRADIENTImage method is:
211%
212%      UnregisterGRADIENTImage(void)
213%
214*/
215ModuleExport void UnregisterGRADIENTImage(void)
216{
217  (void) UnregisterMagickInfo("RADIAL-GRADIENT");
218  (void) UnregisterMagickInfo("GRADIENT");
219}
Note: See TracBrowser for help on using the browser.