|
|
Definition at line 152 of file cip.c.
References AcquireImagePixels(), assert, BasePath, _Image::client_data, CloseBlob(), _Image::columns, _Image::debug, _Image::exception, _Image::filename, FormatMagickString(), GetImageAttribute(), GetMagickModule, GetPathComponent(), LogMagickEvent(), MagickBooleanType, MagickFalse, MagickProgressMonitor, MagickSignature, MagickTrue, MaxRGB, MaxTextExtent, Min, OpenBlob(), _Image::page, PixelIntensityToQuantum, _Image::progress_monitor, QuantumTick, RGBColorspace, _Image::rows, SaveImageTag, SetImageColorspace(), _Image::signature, _ImageInfo::signature, TraceEvent, _ImageAttribute::value, WriteBinaryBlobMode, WriteBlobString(), _RectangleInfo::x, and _RectangleInfo::y.
Referenced by RegisterCIPImage().
00153 {
00154 char
00155 buffer[ MaxTextExtent];
00156
00157 const ImageAttribute
00158 *attribute;
00159
00160 long
00161 y;
00162
00163 MagickBooleanType
00164 status;
00165
00166 register const PixelPacket
00167 *p;
00168
00169 register long
00170 i,
00171 x;
00172
00173 unsigned char
00174 byte;
00175
00176
00177
00178
00179 assert(image_info != ( const ImageInfo *) NULL);
00180 assert(image_info-> signature == MagickSignature);
00181 assert(image != ( Image *) NULL);
00182 assert(image-> signature == MagickSignature);
00183 if (image-> debug != MagickFalse)
00184 ( void) LogMagickEvent(TraceEvent, GetMagickModule(),image-> filename);
00185 status= OpenBlob(image_info,image,WriteBinaryBlobMode,&image-> exception);
00186 if (status == MagickFalse)
00187 return(status);
00188 ( void) WriteBlobString(image, "<CiscoIPPhoneImage>\n");
00189 attribute= GetImageAttribute(image, "label");
00190 if (attribute != ( const ImageAttribute *) NULL)
00191 ( void) FormatMagickString(buffer,MaxTextExtent, "<Title>%s</Title>\n",
00192 attribute-> value);
00193 else
00194 {
00195 char
00196 basename[ MaxTextExtent];
00197
00198 GetPathComponent(image-> filename,BasePath,basename);
00199 ( void) FormatMagickString(buffer,MaxTextExtent, "<Title>%s</Title>\n",
00200 basename);
00201 }
00202 ( void) WriteBlobString(image,buffer);
00203 ( void) FormatMagickString(buffer,MaxTextExtent, "<LocationX>%ld</LocationX>\n",
00204 image-> page. x);
00205 ( void) WriteBlobString(image,buffer);
00206 ( void) FormatMagickString(buffer,MaxTextExtent, "<LocationY>%ld</LocationY>\n",
00207 image-> page. y);
00208 ( void) WriteBlobString(image,buffer);
00209 ( void) FormatMagickString(buffer,MaxTextExtent, "<Width>%lu</Width>\n",
00210 image-> columns+(image-> columns % 2));
00211 ( void) WriteBlobString(image,buffer);
00212 ( void) FormatMagickString(buffer,MaxTextExtent, "<Height>%lu</Height>\n",
00213 image-> rows);
00214 ( void) WriteBlobString(image,buffer);
00215 ( void) FormatMagickString(buffer,MaxTextExtent, "<Depth>2</Depth>\n");
00216 ( void) WriteBlobString(image,buffer);
00217 ( void) WriteBlobString(image, "<Data>");
00218 ( void) SetImageColorspace(image,RGBColorspace);
00219 for (y=0; y < ( long) image-> rows; y++)
00220 {
00221 p= AcquireImagePixels(image,0,y,image-> columns,1,&image-> exception);
00222 if (p == ( const PixelPacket *) NULL)
00223 break;
00224 for (x=0; x < (( long) image-> columns-3); x+=4)
00225 {
00226 byte=( unsigned char)
00227 (((4* PixelIntensityToQuantum(p+3)/ MaxRGB) & 0x03) << 6) |
00228 (((4* PixelIntensityToQuantum(p+2)/ MaxRGB) & 0x03) << 4) |
00229 (((4* PixelIntensityToQuantum(p+1)/ MaxRGB) & 0x03) << 2) |
00230 (((4* PixelIntensityToQuantum(p+0)/ MaxRGB) & 0x03) << 0);
00231 ( void) FormatMagickString(buffer,MaxTextExtent, "%02x",byte);
00232 ( void) WriteBlobString(image,buffer);
00233 p+=4;
00234 }
00235 if ((image-> columns % 4) != 0)
00236 {
00237 i=( long) image-> columns % 4;
00238 byte=( unsigned char)
00239 ((((4* PixelIntensityToQuantum(p+ Min(i,3))/ MaxRGB) & 0x03) << 6) |
00240 (((4* PixelIntensityToQuantum(p+ Min(i,2))/ MaxRGB) & 0x03) << 4) |
00241 (((4* PixelIntensityToQuantum(p+ Min(i,1))/ MaxRGB) & 0x03) << 2) |
00242 (((4* PixelIntensityToQuantum(p+ Min(i,0))/ MaxRGB) & 0x03) << 0));
00243 ( void) FormatMagickString(buffer,MaxTextExtent, "%02x",~byte);
00244 ( void) WriteBlobString(image,buffer);
00245 }
00246 if ((image-> progress_monitor != ( MagickProgressMonitor) NULL) &&
00247 ( QuantumTick(y,image-> rows) != MagickFalse))
00248 {
00249 status=image-> progress_monitor(SaveImageTag,y,image-> rows,
00250 image-> client_data);
00251 if (status == MagickFalse)
00252 break;
00253 }
00254 }
00255 ( void) WriteBlobString(image, "</Data>\n");
00256 ( void) WriteBlobString(image, "</CiscoIPPhoneImage>\n");
00257 CloseBlob(image);
00258 return( MagickTrue);
00259 }
Here is the call graph for this function:
|