dng.c revision 4c08aed51c5899665ade97263692328eea4af106
13ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
23ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
43ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
53ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
63ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                            DDDD   N   N   GGGG                              %
73ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                            D   D  NN  N  GS                                 %
83ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                            D   D  N N N  G  GG                              %
93ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                            D   D  N  NN  G   G                              %
103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                            DDDD   N   N   GGGG                              %
113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                  Read the Digital Negative Image Format                     %
143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                              Software Design                                %
163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                John Cristy                                  %
173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                 July 1999                                   %
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  Include declarations.
403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
414c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/studio.h"
424c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob.h"
434c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/blob-private.h"
444c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/constitute.h"
454c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/delegate.h"
464c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception.h"
474c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/exception-private.h"
484c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/geometry.h"
494c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image.h"
504c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/image-private.h"
514c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/layer.h"
524c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/list.h"
534c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/log.h"
544c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/magick.h"
554c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/memory_.h"
564c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/resource_.h"
574c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/quantum-private.h"
584c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/static.h"
594c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/string_.h"
604c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/module.h"
614c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/transform.h"
624c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/utility.h"
634c08aed51c5899665ade97263692328eea4af106cristy#include "MagickCore/xml-tree.h"
643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%   R e a d D N G I m a g e                                                   %
713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  ReadDNGImage() reads an binary file in the Digital Negative format and
773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  returns it.  It allocates the memory necessary for the new Image structure
783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  and returns a pointer to the new image.
793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The format of the ReadDNGImage method is:
813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      Image *ReadDNGImage(const ImageInfo *image_info,
833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%        ExceptionInfo *exception)
843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  A description of each parameter follows:
863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o image_info: the image info.
883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%    o exception: return any errors or warnings in this structure.
903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
923ed852eea50f9d4cd633efb8c2b054b8e33c253cristystatic Image *ReadDNGImage(const ImageInfo *image_info,ExceptionInfo *exception)
933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  ExceptionInfo
953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *sans_exception;
963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  Image
983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *image;
993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  ImageInfo
1013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *read_info;
1023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  MagickBooleanType
1043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    status;
1053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  /*
1073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    Open image file.
1083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  */
1093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  assert(image_info != (const ImageInfo *) NULL);
1103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  assert(image_info->signature == MagickSignature);
1113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (image_info->debug != MagickFalse)
1123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
1133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      image_info->filename);
1143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  assert(exception != (ExceptionInfo *) NULL);
1153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  assert(exception->signature == MagickSignature);
1163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  image=AcquireImage(image_info);
1173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception);
1183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (status == MagickFalse)
1193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
1203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      image=DestroyImageList(image);
1213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      return((Image *) NULL);
1223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
1233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) CloseBlob(image);
1243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) DestroyImageList(image);
1253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  /*
1263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    Convert DNG to PPM with delegate.
1273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  */
1283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  image=AcquireImage(image_info);
1293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  read_info=CloneImageInfo(image_info);
13098f91ec7f3fedcd2975966146eb8e396d4c59addcristy  SetImageInfoBlob(read_info,(void *) NULL,0);
1313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) InvokeDelegate(read_info,image,"dng:decode",(char *) NULL,exception);
1323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  image=DestroyImage(image);
133b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy  (void) FormatLocaleString(read_info->filename,MaxTextExtent,"%s.png",
1343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    read_info->unique);
1353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  sans_exception=AcquireExceptionInfo();
1363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  image=ReadImage(read_info,sans_exception);
1373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  sans_exception=DestroyExceptionInfo(sans_exception);
1383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (image == (Image *) NULL)
1393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
140b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy      (void) FormatLocaleString(read_info->filename,MaxTextExtent,"%s.ppm",
1413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        read_info->unique);
1423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      image=ReadImage(read_info,exception);
1433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
1443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RelinquishUniqueFileResource(read_info->filename);
1453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  if (image != (Image *) NULL)
1463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    {
1473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      char
1483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        filename[MaxTextExtent],
1493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        *xml;
1503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      ExceptionInfo
1523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        *sans;
1533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      (void) CopyMagickString(image->magick,read_info->magick,MaxTextExtent);
155b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy      (void) FormatLocaleString(filename,MaxTextExtent,"%s.ufraw",
1563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        read_info->unique);
1573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      sans=AcquireExceptionInfo();
1583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      xml=FileToString(filename,MaxTextExtent,sans);
1593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      (void) RelinquishUniqueFileResource(filename);
1603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      if (xml != (char *) NULL)
1613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        {
1623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          XMLTreeInfo
163ddbc41b8cf3749a1d8fbad1dd5dede5cb62aabefcristy            *ufraw;
1643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          /*
1663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            Inject
1673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          */
1683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          ufraw=NewXMLTree(xml,sans);
1693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          if (ufraw != (XMLTreeInfo *) NULL)
1703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            {
1713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              char
1723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                *content,
1733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                property[MaxTextExtent];
1743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              const char
1763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                *tag;
1773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              XMLTreeInfo
1793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                *next;
1803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
1813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              if (image->properties == (void *) NULL)
1823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                ((Image *) image)->properties=NewSplayTree(
1833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  CompareSplayTreeString,RelinquishMagickMemory,
1843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  RelinquishMagickMemory);
1853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              next=GetXMLTreeChild(ufraw,(const char *) NULL);
1863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              while (next != (XMLTreeInfo *) NULL)
1873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              {
1883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                tag=GetXMLTreeTag(next);
1893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                if (tag == (char *) NULL)
1903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  tag="unknown";
191b51dff5c0d16a4c1b69ff683e786cb3b4c467694cristy                (void) FormatLocaleString(property,MaxTextExtent,"dng:%s",tag);
1923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                content=ConstantString(GetXMLTreeContent(next));
1933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                StripString(content);
1943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                if ((LocaleCompare(tag,"log") != 0) &&
1953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                    (LocaleCompare(tag,"InputFilename") != 0) &&
1963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                    (LocaleCompare(tag,"OutputFilename") != 0) &&
1973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                    (LocaleCompare(tag,"OutputType") != 0) &&
1983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                    (strlen(content) != 0))
1993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                  (void) AddValueToSplayTree((SplayTreeInfo *)
2003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                    ((Image *) image)->properties,ConstantString(property),
2013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                    content);
2023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy                next=GetXMLTreeSibling(next);
2033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              }
2043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy              ufraw=DestroyXMLTree(ufraw);
2053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy            }
2063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy          xml=DestroyString(xml);
2073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy        }
2083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy      sans=DestroyExceptionInfo(sans);
2093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    }
2103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  read_info=DestroyImageInfo(read_info);
2113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(image);
2123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
2133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
2143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
2153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
2173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
2183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
2193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%   R e g i s t e r D N G I m a g e                                           %
2203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
2213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
2223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
2233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
2253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  RegisterDNGImage() adds attributes for the DNG image format to
2263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  the list of supported formats.  The attributes include the image format
2273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  tag, a method to read and/or write the format, whether the format
2283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  supports the saving of more than one frame to the same file or blob,
2293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  whether the format supports native in-memory I/O, and a brief
2303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  description of the format.
2313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
2323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The format of the RegisterDNGImage method is:
2333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
234bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristy%      size_t RegisterDNGImage(void)
2353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
2363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
237bb50337b2a8a16ca7e903cc04ab195ff0fd47ae6cristyModuleExport size_t RegisterDNGImage(void)
2383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
2393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  MagickInfo
2403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy    *entry;
2413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
24294c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry=SetMagickInfo("3FR");
24394c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
24494c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry->blob_support=MagickFalse;
24594c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry->seekable_stream=MagickTrue;
24694c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry->format_type=ExplicitFormatType;
24794c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry->description=ConstantString("Hasselblad CFV/H3D39II");
24894c8fe4acb048572fde54fe7667b3919d8a3c768cristy  entry->module=ConstantString("DNG");
24994c8fe4acb048572fde54fe7667b3919d8a3c768cristy  (void) RegisterMagickInfo(entry);
2503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("ARW");
2513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
2523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
2533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
2543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
2553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Sony Alpha Raw Image Format");
2563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
2573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
2583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("DNG");
2593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
2603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
2613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
2623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
2633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Digital Negative");
2643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
2653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
2663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("CR2");
2673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
2683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
2693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
2703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
2713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Canon Digital Camera Raw Image Format");
2723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
2733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
2743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("CRW");
2753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
2763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
2773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
2783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
2793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Canon Digital Camera Raw Image Format");
2803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
2813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
2823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("DCR");
2833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
2843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
2853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
2863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
2873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Kodak Digital Camera Raw Image File");
2883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
2893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
2903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("ERF");
2913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
2923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
2933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
2943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
2953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Epson RAW Format");
2963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
2973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
2983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("KDC");
2993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3003ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Kodak Digital Camera Raw Image Format");
3043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("K25");
3073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Kodak Digital Camera Raw Image Format");
3123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("MRW");
3153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3173ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3193ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Sony (Minolta) Raw Image File");
3203ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3213ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3223ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("NEF");
3233ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3243ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3253ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3263ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3273ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Nikon Digital SLR Camera Raw Image File");
3283ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3293ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3303ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("ORF");
3313ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3323ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3333ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3343ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3353ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Olympus Digital Camera Raw Image File");
3363ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3373ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3383ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("PEF");
3393ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3403ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3413ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3423ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3433ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Pentax Electronic File");
3443ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3453ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3463ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("RAF");
3473ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3483ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3493ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3503ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3513ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Fuji CCD-RAW Graphic File");
3523ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3533ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3543ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("SRF");
3553ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3563ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3573ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3583ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3593ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Sony Raw Format");
3603ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3613ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3623ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("SR2");
3633ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3643ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3653ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3663ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3673ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Sony Raw Format 2");
3683ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3693ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3703ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry=SetMagickInfo("X3F");
3713ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->decoder=(DecodeImageHandler *) ReadDNGImage;
3723ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->blob_support=MagickFalse;
3733ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->seekable_stream=MagickTrue;
3743ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->format_type=ExplicitFormatType;
3753ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->description=ConstantString("Sigma Camera RAW Picture File");
3763ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  entry->module=ConstantString("DNG");
3773ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) RegisterMagickInfo(entry);
3783ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  return(MagickImageCoderSignature);
3793ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
3803ed852eea50f9d4cd633efb8c2b054b8e33c253cristy
3813ed852eea50f9d4cd633efb8c2b054b8e33c253cristy/*
3823ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3833ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3843ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3853ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3863ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%   U n r e g i s t e r D N G I m a g e                                       %
3873ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3883ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3893ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%                                                                             %
3903ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3913ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3923ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  UnregisterDNGImage() removes format registrations made by the
3933ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  BIM module from the list of supported formats.
3943ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3953ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%  The format of the UnregisterBIMImage method is:
3963ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3973ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%      UnregisterDNGImage(void)
3983ed852eea50f9d4cd633efb8c2b054b8e33c253cristy%
3993ed852eea50f9d4cd633efb8c2b054b8e33c253cristy*/
4003ed852eea50f9d4cd633efb8c2b054b8e33c253cristyModuleExport void UnregisterDNGImage(void)
4013ed852eea50f9d4cd633efb8c2b054b8e33c253cristy{
4023ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("X3F");
4033ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("SR2");
4043ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("SRF");
4053ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("RAF");
4063ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("PEF");
4073ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("ORF");
4083ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("NEF");
4093ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("MRW");
4103ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("K25");
4113ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("KDC");
4123ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("DCR");
4133ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("CRW");
4143ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("CR2");
4153ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("DNG");
4163ed852eea50f9d4cd633efb8c2b054b8e33c253cristy  (void) UnregisterMagickInfo("ARW");
41794c8fe4acb048572fde54fe7667b3919d8a3c768cristy  (void) UnregisterMagickInfo("3FR");
4183ed852eea50f9d4cd633efb8c2b054b8e33c253cristy}
419