]> granicus.if.org Git - imagemagick/blob - MagickCore/prepress.c
(no commit message)
[imagemagick] / MagickCore / prepress.c
1 /*
2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 %                                                                             %
4 %                                                                             %
5 %                                                                             %
6 %           PPPP    RRRR    EEEEE  PPPP   RRRR   EEEEE  SSSSS  SSSSS          %
7 %           P   P   R   R   E      P   P  R   R  E      SS     SS             %
8 %           PPPP    RRRR    EEE    PPPP   RRRR   EEE     SSS    SSS           %
9 %           P       R R     E      P      R R    E         SS     SS          %
10 %           P       R  R    EEEEE  P      R  R   EEEEE  SSSSS  SSSSS          %
11 %                                                                             %
12 %                                                                             %
13 %                         MagickCore Prepress Methods                         %
14 %                                                                             %
15 %                              Software Design                                %
16 %                                John Cristy                                  %
17 %                                October 2001                                 %
18 %                                                                             %
19 %                                                                             %
20 %  Copyright 1999-2011 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 \f
39 /*
40   Include declarations.
41 */
42 #include "MagickCore/studio.h"
43 #include "MagickCore/cache-view.h"
44 #include "MagickCore/exception.h"
45 #include "MagickCore/exception-private.h"
46 #include "MagickCore/hashmap.h"
47 #include "MagickCore/image.h"
48 #include "MagickCore/list.h"
49 #include "MagickCore/memory_.h"
50 #include "MagickCore/pixel-accessor.h"
51 #include "MagickCore/prepress.h"
52 #include "MagickCore/registry.h"
53 #include "MagickCore/semaphore.h"
54 #include "MagickCore/splay-tree.h"
55 #include "MagickCore/string_.h"
56 \f
57 /*
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
59 %                                                                             %
60 %                                                                             %
61 %                                                                             %
62 %   G e t I m a g e T o t a l I n k D e n s i t y                             %
63 %                                                                             %
64 %                                                                             %
65 %                                                                             %
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
67 %
68 %  GetImageTotalInkDensity() returns the total ink density for a CMYK image.
69 %  Total Ink Density (TID) is determined by adding the CMYK values in the
70 %  darkest shadow area in an image.
71 %
72 %  The format of the GetImageTotalInkDensity method is:
73 %
74 %      double GetImageTotalInkDensity(const Image *image)
75 %
76 %  A description of each parameter follows:
77 %
78 %    o image: the image.
79 %
80 */
81 MagickExport double GetImageTotalInkDensity(Image *image)
82 {
83   CacheView
84     *image_view;
85
86   double
87     total_ink_density;
88
89   ExceptionInfo
90     *exception;
91
92   MagickBooleanType
93     status;
94
95   ssize_t
96     y;
97
98   assert(image != (Image *) NULL);
99   if (image->debug != MagickFalse)
100     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
101   assert(image->signature == MagickSignature);
102   if (image->colorspace != CMYKColorspace)
103     {
104       (void) ThrowMagickException(&image->exception,GetMagickModule(),
105         ImageError,"ColorSeparatedImageRequired","`%s'",image->filename);
106       return(0.0);
107     }
108   status=MagickTrue;
109   total_ink_density=0.0;
110   exception=(&image->exception);
111   image_view=AcquireCacheView(image);
112 #if defined(MAGICKCORE_OPENMP_SUPPORT)
113   #pragma omp parallel for schedule(dynamic,4) shared(status)
114 #endif
115   for (y=0; y < (ssize_t) image->rows; y++)
116   {
117     double
118       density;
119
120     register const Quantum
121       *p;
122
123     register ssize_t
124       x;
125
126     p=GetCacheViewVirtualPixels(image_view,0,y,image->columns,1,exception);
127     if (p == (const Quantum *) NULL)
128       {
129         status=MagickFalse;
130         continue;
131       }
132     for (x=0; x < (ssize_t) image->columns; x++)
133     {
134       density=(double) GetPixelRed(image,p)+GetPixelGreen(image,p)+
135         GetPixelBlue(image,p)+GetPixelBlack(image,p);
136       if (density > total_ink_density)
137 #if defined(MAGICKCORE_OPENMP_SUPPORT)
138   #pragma omp critical (MagickCore_GetImageTotalInkDensity)
139 #endif
140         {
141           if (density > total_ink_density)
142             total_ink_density=density;
143         }
144       p+=GetPixelChannels(image);
145     }
146   }
147   image_view=DestroyCacheView(image_view);
148   if (status == MagickFalse)
149     total_ink_density=0.0;
150   return(total_ink_density);
151 }