1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% TTTTT IIIII L EEEEE % 7% T I L E % 8% T I L EEE % 9% T I L E % 10% T IIIII LLLLL EEEEE % 11% % 12% % 13% Return A Tiled Image Using Texture. % 14% % 15% Software Design % 16% Cristy % 17% July 1992 % 18% % 19% % 20% Copyright 1999-2016 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/constitute.h" 46#include "MagickCore/exception.h" 47#include "MagickCore/exception-private.h" 48#include "MagickCore/image.h" 49#include "MagickCore/image-private.h" 50#include "MagickCore/list.h" 51#include "MagickCore/magick.h" 52#include "MagickCore/memory_.h" 53#include "MagickCore/monitor.h" 54#include "MagickCore/monitor-private.h" 55#include "MagickCore/quantum-private.h" 56#include "MagickCore/static.h" 57#include "MagickCore/string_.h" 58#include "MagickCore/module.h" 59 60/* 61%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 62% % 63% % 64% % 65% R e a d T I L E I m a g e % 66% % 67% % 68% % 69%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70% 71% ReadTILEImage tiles a texture on an image. It allocates the 72% memory necessary for the new Image structure and returns a pointer to the 73% new image. 74% 75% The format of the ReadTILEImage method is: 76% 77% Image *ReadTILEImage(const ImageInfo *image_info, 78% ExceptionInfo *exception) 79% 80% A description of each parameter follows: 81% 82% o image_info: the image info. 83% 84% o exception: return any errors or warnings in this structure. 85% 86*/ 87static Image *ReadTILEImage(const ImageInfo *image_info, 88 ExceptionInfo *exception) 89{ 90 Image 91 *image, 92 *tile_image; 93 94 ImageInfo 95 *read_info; 96 97 MagickBooleanType 98 status; 99 100 /* 101 Initialize Image structure. 102 */ 103 assert(image_info != (const ImageInfo *) NULL); 104 assert(image_info->signature == MagickCoreSignature); 105 if (image_info->debug != MagickFalse) 106 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 107 image_info->filename); 108 assert(exception != (ExceptionInfo *) NULL); 109 assert(exception->signature == MagickCoreSignature); 110 read_info=CloneImageInfo(image_info); 111 SetImageInfoBlob(read_info,(void *) NULL,0); 112 *read_info->magick='\0'; 113 tile_image=ReadImage(read_info,exception); 114 read_info=DestroyImageInfo(read_info); 115 if (tile_image == (Image *) NULL) 116 return((Image *) NULL); 117 image=AcquireImage(image_info,exception); 118 if ((image->columns == 0) || (image->rows == 0)) 119 ThrowReaderException(OptionError,"MustSpecifyImageSize"); 120 if (*image_info->filename == '\0') 121 ThrowReaderException(OptionError,"MustSpecifyAnImageName"); 122 status=SetImageExtent(image,image->columns,image->rows,exception); 123 if (status == MagickFalse) 124 return(DestroyImageList(image)); 125 image->colorspace=tile_image->colorspace; 126 image->alpha_trait=tile_image->alpha_trait; 127 if (image->alpha_trait != UndefinedPixelTrait) 128 (void) SetImageBackgroundColor(image,exception); 129 (void) CopyMagickString(image->filename,image_info->filename,MagickPathExtent); 130 if (LocaleCompare(tile_image->magick,"PATTERN") == 0) 131 { 132 tile_image->tile_offset.x=0; 133 tile_image->tile_offset.y=0; 134 } 135 (void) TextureImage(image,tile_image,exception); 136 tile_image=DestroyImage(tile_image); 137 if (image->colorspace == GRAYColorspace) 138 image->type=GrayscaleType; 139 return(GetFirstImageInList(image)); 140} 141 142/* 143%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 144% % 145% % 146% % 147% R e g i s t e r T I L E I m a g e % 148% % 149% % 150% % 151%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 152% 153% RegisterTILEImage() adds attributes for the TILE image format to 154% the list of supported formats. The attributes include the image format 155% tag, a method to read and/or write the format, whether the format 156% supports the saving of more than one frame to the same file or blob, 157% whether the format supports native in-memory I/O, and a brief 158% description of the format. 159% 160% The format of the RegisterTILEImage method is: 161% 162% size_t RegisterTILEImage(void) 163% 164*/ 165ModuleExport size_t RegisterTILEImage(void) 166{ 167 MagickInfo 168 *entry; 169 170 entry=AcquireMagickInfo("TILE","TILE","Tile image with a texture"); 171 entry->decoder=(DecodeImageHandler *) ReadTILEImage; 172 entry->flags|=CoderRawSupportFlag; 173 entry->flags|=CoderEndianSupportFlag; 174 entry->format_type=ImplicitFormatType; 175 (void) RegisterMagickInfo(entry); 176 return(MagickImageCoderSignature); 177} 178 179/* 180%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 181% % 182% % 183% % 184% U n r e g i s t e r T I L E I m a g e % 185% % 186% % 187% % 188%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 189% 190% UnregisterTILEImage() removes format registrations made by the 191% TILE module from the list of supported formats. 192% 193% The format of the UnregisterTILEImage method is: 194% 195% UnregisterTILEImage(void) 196% 197*/ 198ModuleExport void UnregisterTILEImage(void) 199{ 200 (void) UnregisterMagickInfo("TILE"); 201} 202