Powered by Pair ImageMagick logo
Image Magick
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals | Related Pages

ImageMagick-6.1.1/coders/caption.c File Reference

#include "magick/studio.h"
#include "magick/annotate.h"
#include "magick/blob.h"
#include "magick/blob_private.h"
#include "magick/draw.h"
#include "magick/error.h"
#include "magick/error_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/static.h"
#include "magick/string_.h"

Include dependency graph for caption.c:

Include dependency graph

Go to the source code of this file.

Functions

ImageReadCAPTIONImage (const ImageInfo *image_info, ExceptionInfo *exception)
ModuleExport void RegisterCAPTIONImage (void)
ModuleExport void UnregisterCAPTIONImage (void)


Function Documentation

Image* ReadCAPTIONImage const ImageInfo image_info,
ExceptionInfo exception
[static]
 

Definition at line 85 of file caption.c.

References AcquireString(), AllocateImage(), AnnotateImage(), _TypeMetric::ascent, assert, CloneDrawInfo(), CloseBlob(), _Image::columns, CopyMagickString(), _ImageInfo::debug, _TypeMetric::descent, DestroyDrawInfo(), DestroyImageList(), DrawInfo, _Image::filename, _ImageInfo::filename, _DrawInfo::fill, FormatMagickString(), _DrawInfo::geometry, GetFirstImageInList(), GetMagickModule, GetTypeMetrics(), LogMagickEvent(), MagickBooleanType, MagickFalse, MagickSignature, _TypeMetric::max_advance, MaxTextExtent, OpaqueOpacity, OpenBlob(), OptionError, _ImageInfo::pen, ReadBinaryBlobMode, ReadBlobString(), RelinquishMagickMemory(), ResizeMagickMemory(), ResourceLimitError, _Image::rows, SetImage(), _ExceptionInfo::signature, _ImageInfo::signature, _DrawInfo::text, ThrowReaderException, TraceEvent, TypeError, TypeMetric, and _TypeMetric::width.

Referenced by RegisterCAPTIONImage().

00087 { 00088 char 00089 *caption, 00090 geometry[MaxTextExtent]; 00091 00092 DrawInfo 00093 *draw_info; 00094 00095 Image 00096 *image; 00097 00098 MagickBooleanType 00099 status; 00100 00101 register char 00102 *p, 00103 *q; 00104 00105 register long 00106 i; 00107 00108 TypeMetric 00109 metrics; 00110 00111 /* 00112 Initialize Image structure. 00113 */ 00114 assert(image_info != (const ImageInfo *) NULL); 00115 assert(image_info->signature == MagickSignature); 00116 if (image_info->debug != MagickFalse) 00117 (void) LogMagickEvent(TraceEvent,GetMagickModule(),image_info->filename); 00118 assert(exception != (ExceptionInfo *) NULL); 00119 assert(exception->signature == MagickSignature); 00120 image=AllocateImage(image_info); 00121 if (image->columns == 0) 00122 ThrowReaderException(OptionError,"MustSpecifyImageSize"); 00123 if (*image_info->filename != '@') 00124 caption=AcquireString(image_info->filename); 00125 else 00126 { 00127 size_t 00128 length; 00129 00130 /* 00131 Read caption. 00132 */ 00133 (void) CopyMagickString(image->filename,image_info->filename+1, 00134 MaxTextExtent-2); 00135 status=OpenBlob(image_info,image,ReadBinaryBlobMode,exception); 00136 if (status == MagickFalse) 00137 { 00138 DestroyImageList(image); 00139 return((Image *) NULL); 00140 } 00141 length=MaxTextExtent; 00142 caption=AcquireString((char *) NULL); 00143 p=caption; 00144 while (ReadBlobString(image,p) != (char *) NULL) 00145 { 00146 p+=strlen(p); 00147 if ((size_t) (p-caption+MaxTextExtent) < length) 00148 continue; 00149 length<<=1; 00150 caption=(char *) ResizeMagickMemory(caption, 00151 (length+MaxTextExtent)*sizeof(*caption)); 00152 if (caption == (char *) NULL) 00153 break; 00154 p=caption+strlen(caption); 00155 } 00156 if (caption == (char *) NULL) 00157 ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed"); 00158 CloseBlob(image); 00159 } 00160 /* 00161 Format caption. 00162 */ 00163 draw_info=CloneDrawInfo(image_info,(DrawInfo *) NULL); 00164 draw_info->fill=image_info->pen; 00165 draw_info->text=AcquireString(caption); 00166 p=caption; 00167 q=draw_info->text; 00168 for (i=0; *p != '\0'; p++) 00169 { 00170 *q++=(*p); 00171 *q='\0'; 00172 status=GetTypeMetrics(image,draw_info,&metrics); 00173 if (status == MagickFalse) 00174 ThrowReaderException(TypeError,"UnableToGetTypeMetrics"); 00175 if ((metrics.width+metrics.max_advance/2) < (double) image->columns) 00176 continue; 00177 for (p--; (isspace((int) ((unsigned char) *p)) == 0) && (p > caption); p--); 00178 *p++='\n'; 00179 q=draw_info->text; 00180 i++; 00181 } 00182 if (image->rows == 0) 00183 image->rows=(unsigned long) ((i+1)*(metrics.ascent-metrics.descent)); 00184 SetImage(image,OpaqueOpacity); 00185 /* 00186 Draw caption. 00187 */ 00188 (void) strcpy(draw_info->text,caption); 00189 (void) FormatMagickString(geometry,MaxTextExtent,"+%g+%g", 00190 metrics.max_advance/4,metrics.ascent); 00191 draw_info->geometry=AcquireString(geometry); 00192 (void) AnnotateImage(image,draw_info); 00193 draw_info=DestroyDrawInfo(draw_info); 00194 caption=(char *) RelinquishMagickMemory(caption); 00195 return(GetFirstImageInList(image)); 00196 }

Here is the call graph for this function:

ModuleExport void RegisterCAPTIONImage void   ) 
 

Definition at line 221 of file caption.c.

References AcquireString(), _MagickInfo::adjoin, _MagickInfo::decoder, DecoderHandler, _MagickInfo::description, MagickFalse, _MagickInfo::module, ModuleExport, ReadCAPTIONImage(), RegisterMagickInfo(), and SetMagickInfo().

Referenced by RegisterStaticModules().

00222 { 00223 MagickInfo 00224 *entry; 00225 00226 entry=SetMagickInfo("CAPTION"); 00227 entry->decoder=(DecoderHandler *) ReadCAPTIONImage; 00228 entry->adjoin=MagickFalse; 00229 entry->description=AcquireString("Image caption"); 00230 entry->module=AcquireString("CAPTION"); 00231 (void) RegisterMagickInfo(entry); 00232 }

Here is the call graph for this function:

ModuleExport void UnregisterCAPTIONImage void   ) 
 

Definition at line 253 of file caption.c.

References ModuleExport, and UnregisterMagickInfo().

Referenced by UnregisterStaticModules().

00254 { 00255 (void) UnregisterMagickInfo("CAPTION"); 00256 }

Here is the call graph for this function:


Generated on Mon Oct 25 13:42:29 2004 for ImageMagick by doxygen 1.3.7
ImageMagick Copyright © 2004, ImageMagick Studio LLC