null.c revision 1e178e70fb3c956f9fc1e30c3ba863e882666465
1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% N N U U L L % 7% NN N U U L L % 8% N N N U U L L % 9% N NN U U L L % 10% N N UUU LLLLL LLLLL % 11% % 12% % 13% Read/Write Image Of Uniform Color. % 14% % 15% Software Design % 16% John Cristy % 17% July 1992 % 18% % 19% % 20% Copyright 1999-2011 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 "MagickCore/studio.h" 43#include "MagickCore/blob.h" 44#include "MagickCore/blob-private.h" 45#include "MagickCore/cache.h" 46#include "MagickCore/color.h" 47#include "MagickCore/color-private.h" 48#include "MagickCore/colorspace-private.h" 49#include "MagickCore/exception.h" 50#include "MagickCore/exception-private.h" 51#include "MagickCore/image.h" 52#include "MagickCore/image-private.h" 53#include "MagickCore/list.h" 54#include "MagickCore/magick.h" 55#include "MagickCore/memory_.h" 56#include "MagickCore/pixel-accessor.h" 57#include "MagickCore/quantum-private.h" 58#include "MagickCore/static.h" 59#include "MagickCore/string_.h" 60#include "MagickCore/module.h" 61 62/* 63 Forward declarations. 64*/ 65static MagickBooleanType 66 WriteNULLImage(const ImageInfo *,Image *,ExceptionInfo *); 67 68/* 69%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70% % 71% % 72% % 73% R e a d N U L L I m a g e % 74% % 75% % 76% % 77%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 78% 79% ReadNULLImage creates a constant image and initializes it to the 80% X server color as specified by the filename. It allocates the memory 81% necessary for the new Image structure and returns a pointer to the new 82% image. 83% 84% The format of the ReadNULLImage method is: 85% 86% Image *ReadNULLImage(const ImageInfo *image_info, 87% ExceptionInfo *exception) 88% 89% A description of each parameter follows: 90% 91% o image_info: the image info. 92% 93% o exception: return any errors or warnings in this structure. 94% 95*/ 96static Image *ReadNULLImage(const ImageInfo *image_info, 97 ExceptionInfo *exception) 98{ 99 Image 100 *image; 101 102 PixelInfo 103 background; 104 105 register ssize_t 106 x; 107 108 register Quantum 109 *q; 110 111 ssize_t 112 y; 113 114 /* 115 Initialize Image structure. 116 */ 117 assert(image_info != (const ImageInfo *) NULL); 118 assert(image_info->signature == MagickSignature); 119 if (image_info->debug != MagickFalse) 120 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 121 image_info->filename); 122 assert(exception != (ExceptionInfo *) NULL); 123 assert(exception->signature == MagickSignature); 124 image=AcquireImage(image_info); 125 if (image->columns == 0) 126 image->columns=1; 127 if (image->rows == 0) 128 image->rows=1; 129 image->matte=MagickTrue; 130 GetPixelInfo(image,&background); 131 background.alpha=(MagickRealType) TransparentAlpha; 132 if (image->colorspace == CMYKColorspace) 133 ConvertRGBToCMYK(&background); 134 for (y=0; y < (ssize_t) image->rows; y++) 135 { 136 q=QueueAuthenticPixels(image,0,y,image->columns,1,exception); 137 if (q == (const Quantum *) NULL) 138 break; 139 for (x=0; x < (ssize_t) image->columns; x++) 140 { 141 SetPixelPixelInfo(image,&background,q); 142 q+=GetPixelChannels(image); 143 } 144 if (SyncAuthenticPixels(image,exception) == MagickFalse) 145 break; 146 } 147 return(GetFirstImageInList(image)); 148} 149 150/* 151%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 152% % 153% % 154% % 155% R e g i s t e r N U L L I m a g e % 156% % 157% % 158% % 159%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 160% 161% RegisterNULLImage() adds attributes for the NULL image format to 162% the list of supported formats. The attributes include the image format 163% tag, a method to read and/or write the format, whether the format 164% supports the saving of more than one frame to the same file or blob, 165% whether the format supports native in-memory I/O, and a brief 166% description of the format. 167% 168% The format of the RegisterNULLImage method is: 169% 170% size_t RegisterNULLImage(void) 171% 172*/ 173ModuleExport size_t RegisterNULLImage(void) 174{ 175 MagickInfo 176 *entry; 177 178 entry=SetMagickInfo("NULL"); 179 entry->decoder=(DecodeImageHandler *) ReadNULLImage; 180 entry->encoder=(EncodeImageHandler *) WriteNULLImage; 181 entry->adjoin=MagickFalse; 182 entry->format_type=ImplicitFormatType; 183 entry->description=ConstantString("Constant image of uniform color"); 184 entry->module=ConstantString("NULL"); 185 (void) RegisterMagickInfo(entry); 186 return(MagickImageCoderSignature); 187} 188 189/* 190%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 191% % 192% % 193% % 194% U n r e g i s t e r N U L L I m a g e % 195% % 196% % 197% % 198%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 199% 200% UnregisterNULLImage() removes format registrations made by the 201% NULL module from the list of supported formats. 202% 203% The format of the UnregisterNULLImage method is: 204% 205% UnregisterNULLImage(void) 206% 207*/ 208ModuleExport void UnregisterNULLImage(void) 209{ 210 (void) UnregisterMagickInfo("NULL"); 211} 212 213/* 214%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 215% % 216% % 217% % 218% W r i t e N U L L I m a g e % 219% % 220% % 221% % 222%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 223% 224% WriteNULLImage writes no output at all. It is useful when specified 225% as an output format when profiling. 226% 227% The format of the WriteNULLImage method is: 228% 229% MagickBooleanType WriteNULLImage(const ImageInfo *image_info, 230% Image *image,ExceptionInfo *exception) 231% 232% A description of each parameter follows. 233% 234% o image_info: the image info. 235% 236% o image: The image. 237% 238% o exception: return any errors or warnings in this structure. 239% 240*/ 241static MagickBooleanType WriteNULLImage(const ImageInfo *image_info, 242 Image *image,ExceptionInfo *exception) 243{ 244 assert(image_info != (const ImageInfo *) NULL); 245 assert(image_info->signature == MagickSignature); 246 assert(image != (Image *) NULL); 247 assert(image->signature == MagickSignature); 248 assert(exception != (ExceptionInfo *) NULL); 249 if (image->debug != MagickFalse) 250 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 251 return(MagickTrue); 252} 253