1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% M M PPPP RRRR % 7% MM MM P P R R % 8% M M M PPPP RRRR % 9% M M P R R % 10% M M P R R % 11% % 12% % 13% Read/Write the Magick Persistent Registry. % 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/exception.h" 46#include "MagickCore/exception-private.h" 47#include "MagickCore/magick.h" 48#include "MagickCore/memory_.h" 49#include "MagickCore/registry.h" 50#include "MagickCore/quantum-private.h" 51#include "MagickCore/static.h" 52#include "MagickCore/string_.h" 53#include "MagickCore/module.h" 54 55/* 56 Forward declarations. 57*/ 58static MagickBooleanType 59 WriteMPRImage(const ImageInfo *,Image *,ExceptionInfo *); 60 61/* 62%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 63% % 64% % 65% % 66% R e a d M P R I m a g e % 67% % 68% % 69% % 70%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 71% 72% ReadMPRImage() reads a Magick Persistent Registry image as a blob from 73% memory. It allocates the memory necessary for the new Image structure and 74% returns a pointer to the new image. 75% 76% The format of the ReadMPRImage method is: 77% 78% Image *ReadMPRImage(const ImageInfo *image_info, 79% ExceptionInfo *exception) 80% 81% A description of each parameter follows: 82% 83% o image_info: the image info. 84% 85% o exception: return any errors or warnings in this structure. 86% 87*/ 88static Image *ReadMPRImage(const ImageInfo *image_info,ExceptionInfo *exception) 89{ 90 Image 91 *image; 92 93 assert(image_info != (const ImageInfo *) NULL); 94 assert(image_info->signature == MagickCoreSignature); 95 if (image_info->debug != MagickFalse) 96 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 97 image_info->filename); 98 assert(exception != (ExceptionInfo *) NULL); 99 assert(exception->signature == MagickCoreSignature); 100 image=(Image *) GetImageRegistry(ImageRegistryType,image_info->filename, 101 exception); 102 if (image != (Image *) NULL) 103 (void) SyncImageSettings(image_info,image,exception); 104 return(image); 105} 106 107/* 108%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 109% % 110% % 111% % 112% R e g i s t e r M P R I m a g e % 113% % 114% % 115% % 116%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 117% 118% RegisterMPRImage() adds attributes for the MPR image format to 119% the list of supported formats. The attributes include the image format 120% tag, a method to read and/or write the format, whether the format 121% supports the saving of more than one frame to the same file or blob, 122% whether the format supports native in-memory I/O, and a brief 123% description of the format. 124% 125% The format of the RegisterMPRImage method is: 126% 127% size_t RegisterMPRImage(void) 128% 129*/ 130ModuleExport size_t RegisterMPRImage(void) 131{ 132 MagickInfo 133 *entry; 134 135 entry=AcquireMagickInfo("MPR","MPR","Magick Persistent Registry"); 136 entry->decoder=(DecodeImageHandler *) ReadMPRImage; 137 entry->encoder=(EncodeImageHandler *) WriteMPRImage; 138 entry->flags^=CoderAdjoinFlag; 139 entry->format_type=ImplicitFormatType; 140 entry->flags|=CoderStealthFlag; 141 (void) RegisterMagickInfo(entry); 142 entry=AcquireMagickInfo("MPR","MPRI","Magick Persistent Registry"); 143 entry->decoder=(DecodeImageHandler *) ReadMPRImage; 144 entry->encoder=(EncodeImageHandler *) WriteMPRImage; 145 entry->flags^=CoderAdjoinFlag; 146 entry->format_type=ImplicitFormatType; 147 entry->flags|=CoderStealthFlag; 148 (void) RegisterMagickInfo(entry); 149 return(MagickImageCoderSignature); 150} 151 152/* 153%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 154% % 155% % 156% % 157% U n r e g i s t e r M P R I m a g e % 158% % 159% % 160% % 161%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 162% 163% UnregisterMPRImage() removes format registrations made by the 164% MPR module from the list of supported formats. 165% 166% The format of the UnregisterMPRImage method is: 167% 168% UnregisterMPRImage(void) 169% 170*/ 171ModuleExport void UnregisterMPRImage(void) 172{ 173 (void) UnregisterMagickInfo("MPRI"); 174 (void) UnregisterMagickInfo("MPR"); 175} 176 177/* 178%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 179% % 180% % 181% % 182% W r i t e M P R I m a g e % 183% % 184% % 185% % 186%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 187% 188% WriteMPRImage() writes an image into the Magick Persistent Registry 189% image as a blob from memory. It allocates the memory necessary for the 190% new Image structure and returns a pointer to the new image. 191% 192% The format of the WriteMPRImage method is: 193% 194% MagickBooleanType WriteMPRImage(const ImageInfo *image_info, 195% Image *image,ExceptionInfo *exception) 196% 197% A description of each parameter follows. 198% 199% o image_info: the image info. 200% 201% o image: The image. 202% 203% o exception: return any errors or warnings in this structure. 204% 205*/ 206static MagickBooleanType WriteMPRImage(const ImageInfo *image_info,Image *image, 207 ExceptionInfo *exception) 208{ 209 MagickBooleanType 210 status; 211 212 assert(image_info != (const ImageInfo *) NULL); 213 assert(image_info->signature == MagickCoreSignature); 214 assert(image != (Image *) NULL); 215 assert(image->signature == MagickCoreSignature); 216 magick_unreferenced(image_info); 217 if (image->debug != MagickFalse) 218 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 219 status=SetImageRegistry(ImageRegistryType,image->filename,image,exception); 220 return(status); 221} 222