mpr.c revision 4c08aed51c5899665ade97263692328eea4af106
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% M M PPPP RRRR % 73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MM MM P P R R % 83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% M M M PPPP RRRR % 93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% M M P R R % 103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% M M P R R % 113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Read/Write the Magick Persistent Registry. % 143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Software Design % 163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% John Cristy % 173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% July 1992 % 183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 207e41fe84a841d7b9d7b36b245b65e9dcb3314943cristy% Copyright 1999-2011 ImageMagick Studio LLC, a non-profit organization % 213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% dedicated to making software imaging solutions freely available. % 223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% You may not use this file except in compliance with the License. You may % 243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% obtain a copy of the License at % 253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% http://www.imagemagick.org/script/license.php % 273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Unless required by applicable law or agreed to in writing, software % 293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% distributed under the License is distributed on an "AS IS" BASIS, % 303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% See the License for the specific language governing permissions and % 323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% limitations under the License. % 333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Include declarations. 413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h" 434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h" 444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h" 454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h" 464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h" 474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h" 484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h" 494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/registry.h" 504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h" 514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/static.h" 524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h" 534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/module.h" 543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Forward declarations. 573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 583ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType 593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy WriteMPRImage(const ImageInfo *,Image *); 603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e a d M P R I m a g e % 673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ReadMPRImage() reads a Magick Persistent Registry image as a blob from 733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% memory. It allocates the memory necessary for the new Image structure and 743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% returns a pointer to the new image. 753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the ReadMPRImage method is: 773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% Image *ReadMPRImage(const ImageInfo *image_info, 793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% ExceptionInfo *exception) 803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows: 823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o exception: return any errors or warnings in this structure. 863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 883ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Image *ReadMPRImage(const ImageInfo *image_info,ExceptionInfo *exception) 893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy Image 913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *image; 923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info->signature == MagickSignature); 953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image_info->debug != MagickFalse) 963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image_info->filename); 983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception != (ExceptionInfo *) NULL); 993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(exception->signature == MagickSignature); 1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy image=(Image *) GetImageRegistry(ImageRegistryType,image_info->filename, 1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy exception); 102d89d5aadb8301206bfc2d7c46781ca4b425035f6cristy if (image != (Image *) NULL) 103d89d5aadb8301206bfc2d7c46781ca4b425035f6cristy (void) SyncImageSettings(image_info,image); 1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(image); 1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% R e g i s t e r M P R I m a g e % 1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% RegisterMPRImage() adds attributes for the MPR image format to 1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% the list of supported formats. The attributes include the image format 1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% tag, a method to read and/or write the format, whether the format 1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% supports the saving of more than one frame to the same file or blob, 1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% whether the format supports native in-memory I/O, and a brief 1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% description of the format. 1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the RegisterMPRImage method is: 1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 127bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy% size_t RegisterMPRImage(void) 1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 130bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyModuleExport size_t RegisterMPRImage(void) 1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickInfo 1333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy *entry; 1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry=SetMagickInfo("MPR"); 1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->decoder=(DecodeImageHandler *) ReadMPRImage; 1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->encoder=(EncodeImageHandler *) WriteMPRImage; 1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->adjoin=MagickFalse; 139009d739511cb808de2f5899fe7e06be7350838e9cristy entry->format_type=ImplicitFormatType; 1403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->stealth=MagickTrue; 1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->description=ConstantString("Magick Persistent Registry"); 1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->module=ConstantString("MPR"); 1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RegisterMagickInfo(entry); 1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry=SetMagickInfo("MPRI"); 1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->decoder=(DecodeImageHandler *) ReadMPRImage; 1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->encoder=(EncodeImageHandler *) WriteMPRImage; 1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->adjoin=MagickFalse; 148009d739511cb808de2f5899fe7e06be7350838e9cristy entry->format_type=ImplicitFormatType; 1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->stealth=MagickTrue; 1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->description=ConstantString("Magick Persistent Registry"); 1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy entry->module=ConstantString("MPRI"); 1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) RegisterMagickInfo(entry); 1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(MagickImageCoderSignature); 1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% U n r e g i s t e r M P R I m a g e % 1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% UnregisterMPRImage() removes format registrations made by the 1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MPR module from the list of supported formats. 1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the UnregisterMPRImage method is: 1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% UnregisterMPRImage(void) 1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristyModuleExport void UnregisterMPRImage(void) 1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnregisterMagickInfo("MPRI"); 1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) UnregisterMagickInfo("MPR"); 1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/* 1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% W r i t e M P R I m a g e % 1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% % 1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% WriteMPRImage() writes an image into the Magick Persistent Registry 1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% image as a blob from memory. It allocates the memory necessary for the 1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% new Image structure and returns a pointer to the new image. 1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% The format of the WriteMPRImage method is: 1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% MagickBooleanType WriteMPRImage(const ImageInfo *image_info,Image *image) 1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% A description of each parameter follows. 2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image_info: the image info. 2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% o image: The image. 2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy% 2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/ 2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic MagickBooleanType WriteMPRImage(const ImageInfo *image_info,Image *image) 2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{ 2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy MagickBooleanType 2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status; 2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy 2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info != (const ImageInfo *) NULL); 2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image_info->signature == MagickSignature); 2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image != (Image *) NULL); 2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy assert(image->signature == MagickSignature); 2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy if (image->debug != MagickFalse) 2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); 2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy status=SetImageRegistry(ImageRegistryType,image->filename,image, 2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy &image->exception); 2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy return(status); 2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy} 222