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 */
58 static 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 */
ReadMPRImage(const ImageInfo * image_info,ExceptionInfo * exception)88 static 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 */
RegisterMPRImage(void)130 ModuleExport 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 */
UnregisterMPRImage(void)171 ModuleExport 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 */
WriteMPRImage(const ImageInfo * image_info,Image * image,ExceptionInfo * exception)206 static 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