]> granicus.if.org Git - imagemagick/blobdiff - coders/braille.c
(no commit message)
[imagemagick] / coders / braille.c
index 968987f70955952595d43e149a18225d6a80a9b9..ec930d6ed0a5b6b9ac5ec949f3d91e7ae6591f79 100644 (file)
@@ -15,7 +15,7 @@
 %                                February 2008                                %
 %                                                                             %
 %                                                                             %
-%  Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization      %
+%  Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization      %
 %  dedicated to making software imaging solutions freely available.           %
 %                                                                             %
 %  You may not use this file except in compliance with the License.  You may  %
 /*
   Include declarations.
 */
-#include "magick/studio.h"
-#include "magick/blob.h"
-#include "magick/blob-private.h"
-#include "magick/cache.h"
-#include "magick/color-private.h"
-#include "magick/colorspace.h"
-#include "magick/constitute.h"
-#include "magick/exception.h"
-#include "magick/exception-private.h"
-#include "magick/image.h"
-#include "magick/image-private.h"
-#include "magick/list.h"
-#include "magick/magick.h"
-#include "magick/memory_.h"
-#include "magick/module.h"
-#include "magick/monitor.h"
-#include "magick/monitor-private.h"
-#include "magick/property.h"
-#include "magick/quantize.h"
-#include "magick/static.h"
-#include "magick/string_.h"
-#include "magick/utility.h"
+#include "MagickCore/studio.h"
+#include "MagickCore/attribute.h"
+#include "MagickCore/blob.h"
+#include "MagickCore/blob-private.h"
+#include "MagickCore/cache.h"
+#include "MagickCore/color-private.h"
+#include "MagickCore/colorspace.h"
+#include "MagickCore/constitute.h"
+#include "MagickCore/exception.h"
+#include "MagickCore/exception-private.h"
+#include "MagickCore/image.h"
+#include "MagickCore/image-private.h"
+#include "MagickCore/list.h"
+#include "MagickCore/magick.h"
+#include "MagickCore/memory_.h"
+#include "MagickCore/module.h"
+#include "MagickCore/monitor.h"
+#include "MagickCore/monitor-private.h"
+#include "MagickCore/pixel-accessor.h"
+#include "MagickCore/property.h"
+#include "MagickCore/quantize.h"
+#include "MagickCore/static.h"
+#include "MagickCore/string_.h"
+#include "MagickCore/utility.h"
 \f
 /*
   Forward declarations.
 */
 static MagickBooleanType
-  WriteBRAILLEImage(const ImageInfo *,Image *);
+  WriteBRAILLEImage(const ImageInfo *,Image *,ExceptionInfo *);
 \f
 /*
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -86,10 +88,10 @@ static MagickBooleanType
 %
 %  The format of the RegisterBRAILLEImage method is:
 %
-%      unsigned long RegisterBRAILLEImage(void)
+%      size_t RegisterBRAILLEImage(void)
 %
 */
-ModuleExport unsigned long RegisterBRAILLEImage(void)
+ModuleExport size_t RegisterBRAILLEImage(void)
 {
   MagickInfo
     *entry;
@@ -157,7 +159,7 @@ ModuleExport void UnregisterBRAILLEImage(void)
 %  The format of the WriteBRAILLEImage method is:
 %
 %      MagickBooleanType WriteBRAILLEImage(const ImageInfo *image_info,
-%        Image *image)
+%        Image *image,ExceptionInfo *exception)
 %
 %  A description of each parameter follows.
 %
@@ -165,9 +167,11 @@ ModuleExport void UnregisterBRAILLEImage(void)
 %
 %    o image:  The image.
 %
+%    o exception: return any errors or warnings in this structure.
+%
 */
 static MagickBooleanType WriteBRAILLEImage(const ImageInfo *image_info,
-  Image *image)
+  Image *image,ExceptionInfo *exception)
 {
   char
     buffer[MaxTextExtent];
@@ -175,28 +179,27 @@ static MagickBooleanType WriteBRAILLEImage(const ImageInfo *image_info,
   const char
     *value;
 
-  long
-    y;
+  int
+    unicode = 0,
+    iso_11548_1 = 0;
 
   MagickBooleanType
     status;
 
-  register const IndexPacket
-    *indexes;
+  Quantum
+    polarity;
 
-  register const PixelPacket
+  register const Quantum
     *p;
 
-  IndexPacket
-    polarity;
-
-  register long
+  register ssize_t
     x;
 
-  unsigned long
+  size_t
     cell_height = 4;
-  int
-    unicode = 0, iso_11548_1 = 0;
+
+  ssize_t
+    y;
 
   /*
     Open output image file.
@@ -205,73 +208,78 @@ static MagickBooleanType WriteBRAILLEImage(const ImageInfo *image_info,
   assert(image_info->signature == MagickSignature);
   assert(image != (Image *) NULL);
   assert(image->signature == MagickSignature);
-
   if (LocaleCompare(image_info->magick, "UBRL") == 0)
-    unicode = 1;
+    unicode=1;
   else
     if (LocaleCompare(image_info->magick, "ISOBRL") == 0)
-      iso_11548_1 = 1;
+      iso_11548_1=1;
     else
-      cell_height = 3;
-
+      cell_height=3;
   if (image->debug != MagickFalse)
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
-  status=OpenBlob(image_info,image,WriteBinaryBlobMode,&image->exception);
+  assert(exception != (ExceptionInfo *) NULL);
+  assert(exception->signature == MagickSignature);
+  status=OpenBlob(image_info,image,WriteBinaryBlobMode,exception);
   if (status == MagickFalse)
     return(status);
-
   if (!iso_11548_1)
     {
-      value=GetImageProperty(image,"Label");
-      if (value != (const char *) NULL) {
-        (void) FormatMagickString(buffer,MaxTextExtent,"Title: %s\n", value);
-        (void) WriteBlobString(image,buffer);
-      }
-      if (image->page.x)
-      {
-        (void) FormatMagickString(buffer,MaxTextExtent,"X: %ld\n", image->page.x);
-        (void) WriteBlobString(image,buffer);
-      }
-      if (image->page.y)
-      {
-        (void) FormatMagickString(buffer,MaxTextExtent,"Y: %ld\n", image->page.y);
-        (void) WriteBlobString(image,buffer);
-      }
-      (void) FormatMagickString(buffer,MaxTextExtent,"Width: %lu\n",
-        image->columns+(image->columns % 2));
+      value=GetImageProperty(image,"label",exception);
+      if (value != (const char *) NULL)
+        {
+          (void) FormatLocaleString(buffer,MaxTextExtent,"Title: %s\n", value);
+          (void) WriteBlobString(image,buffer);
+        }
+      if (image->page.x != 0)
+        {
+          (void) FormatLocaleString(buffer,MaxTextExtent,"X: %.20g\n",(double) 
+            image->page.x);
+          (void) WriteBlobString(image,buffer);
+        }
+      if (image->page.y != 0)
+        {
+          (void) FormatLocaleString(buffer,MaxTextExtent,"Y: %.20g\n",(double) 
+            image->page.y);
+          (void) WriteBlobString(image,buffer);
+        }
+      (void) FormatLocaleString(buffer,MaxTextExtent,"Width: %.20g\n",(double)
+        (image->columns+(image->columns % 2)));
       (void) WriteBlobString(image,buffer);
-      (void) FormatMagickString(buffer,MaxTextExtent,"Height: %lu\n", image->rows);
+      (void) FormatLocaleString(buffer,MaxTextExtent,"Height: %.20g\n",(double)
+        image->rows);
       (void) WriteBlobString(image,buffer);
-
       (void) WriteBlobString(image,"\n");
     }
-
-  (void) SetImageType(image,BilevelType);
-  polarity=(IndexPacket) (PixelIntensityToQuantum(&image->colormap[0]) >=
-    (Quantum) (QuantumRange/2));
-  if (image->colors == 2)
-    polarity=(IndexPacket)
-      (PixelIntensityToQuantum(&image->colormap[0]) >=
-       PixelIntensityToQuantum(&image->colormap[1]));
-  for (y=0; y < (long) image->rows; y+=cell_height)
+  (void) SetImageType(image,BilevelType,exception);
+  polarity = 0;
+  if (image->storage_class == PseudoClass) {
+    polarity=(Quantum) (GetPixelInfoIntensity(&image->colormap[0]) >=
+      (Quantum) (QuantumRange/2));
+    if (image->colors == 2)
+      polarity=(Quantum) (GetPixelInfoIntensity(&image->colormap[0]) >=
+        GetPixelInfoIntensity(&image->colormap[1]));
+  }
+  for (y=0; y < (ssize_t) image->rows; y+=(ssize_t) cell_height)
   {
     if ((y+cell_height) > image->rows)
-      cell_height = (unsigned long) (image->rows-y);
+      cell_height = (size_t) (image->rows-y);
 
-    p=GetVirtualPixels(image,0,y,image->columns,cell_height,&image->exception);
-    if (p == (const PixelPacket *) NULL)
+    p=GetVirtualPixels(image,0,y,image->columns,cell_height,exception);
+    if (p == (const Quantum *) NULL)
       break;
-    indexes=GetVirtualIndexQueue(image);
-
-    for (x=0; x < (long) image->columns; x+=2)
+    for (x=0; x < (ssize_t) image->columns; x+=2)
     {
       unsigned char cell = 0;
-      int two_columns = x+1 < (long) image->columns;
+      int two_columns = x+1 < (ssize_t) image->columns;
 
       do
       {
-#define do_cell(dx,dy,bit) \
-        cell |= (indexes[x+dx+dy*image->columns]==polarity)<<bit;
+#define do_cell(dx,dy,bit) do { \
+        if (image->storage_class == PseudoClass) \
+          cell |= (GetPixelIndex(image,p+x+dx+dy*image->columns) == polarity) << bit; \
+        else \
+          cell |= (GetPixelGreen(image,p+x+dx+dy*image->columns) == 0) << bit; \
+} while (0) 
 
         do_cell(0,0,0);
         if (two_columns)
@@ -326,9 +334,10 @@ static MagickBooleanType WriteBRAILLEImage(const ImageInfo *image_info,
           (void) WriteBlobByte(image,iso_to_brf[cell]);
         }
     }
-    if (!iso_11548_1)
+    if (iso_11548_1 == 0)
       (void) WriteBlobByte(image,'\n');
-    status=SetImageProgress(image,SaveImageTag,y,image->rows);
+    status=SetImageProgress(image,SaveImageTag,(MagickOffsetType) y,
+      image->rows);
     if (status == MagickFalse)
       break;
   }