% October 1996 %
% %
% %
-% Copyright 1999-2010 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2011 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 %
% The format of the AcquireFxInfo method is:
%
% FxInfo *AcquireFxInfo(Image *image,const char *expression)
+%
% A description of each parameter follows:
%
% o image: the image.
register ssize_t
i;
- fx_info=(FxInfo *) AcquireAlignedMemory(1,sizeof(*fx_info));
+ fx_info=(FxInfo *) AcquireMagickMemory(sizeof(*fx_info));
if (fx_info == (FxInfo *) NULL)
ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
(void) ResetMagickMemory(fx_info,0,sizeof(*fx_info));
(void) SubstituteString(&fx_info->expression,"8e-","8**10^-");
(void) SubstituteString(&fx_info->expression,"9e-","9**10^-");
}
+ /*
+ Force right-to-left associativity for unary negation.
+ */
+ (void) SubstituteString(&fx_info->expression,"-","-1.0*");
/*
Convert complex to simple operators.
*/
#endif
for (y=0; y < (ssize_t) image->rows; y++)
{
- int
- id;
+ const int
+ id = GetOpenMPThreadId();
MagickBooleanType
sync;
}
indexes=GetCacheViewVirtualIndexQueue(image_view);
noise_indexes=GetCacheViewAuthenticIndexQueue(noise_view);
- id=GetOpenMPThreadId();
for (x=0; x < (ssize_t) image->columns; x++)
{
if ((channel & RedChannel) != 0)
for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++)
if (fx_info[i] != (FxInfo *) NULL)
fx_info[i]=DestroyFxInfo(fx_info[i]);
- fx_info=(FxInfo **) RelinquishAlignedMemory(fx_info);
+ fx_info=(FxInfo **) RelinquishMagickMemory(fx_info);
return(fx_info);
}
number_threads;
number_threads=GetOpenMPMaximumThreads();
- fx_info=(FxInfo **) AcquireAlignedMemory(number_threads,sizeof(*fx_info));
+ fx_info=(FxInfo **) AcquireQuantumMemory(number_threads,sizeof(*fx_info));
if (fx_info == (FxInfo **) NULL)
return((FxInfo **) NULL);
(void) ResetMagickMemory(fx_info,0,number_threads*sizeof(*fx_info));
#endif
for (y=0; y < (ssize_t) fx_image->rows; y++)
{
- int
- id;
+ const int
+ id = GetOpenMPThreadId();
MagickRealType
alpha;
continue;
}
fx_indexes=GetCacheViewAuthenticIndexQueue(fx_view);
- id=GetOpenMPThreadId();
alpha=0.0;
for (x=0; x < (ssize_t) fx_image->columns; x++)
{
#endif
for (y=0; y < (ssize_t) image->rows; y++)
{
- int
- id;
+ const int
+ id = GetOpenMPThreadId();
MagickPixelPacket
pixel;
implode_indexes=GetCacheViewAuthenticIndexQueue(implode_view);
delta.y=scale.y*(double) (y-center.y);
pixel=zero;
- id=GetOpenMPThreadId();
for (x=0; x < (ssize_t) image->columns; x++)
{
/*
}
MagickExport MagickBooleanType PlasmaImageProxy(Image *image,
- RandomInfo *random_info,const SegmentInfo *segment,size_t attenuate,
- size_t depth)
+ CacheView *image_view,RandomInfo *random_info,const SegmentInfo *segment,
+ size_t attenuate,size_t depth)
{
ExceptionInfo
*exception;
local_info=(*segment);
local_info.x2=(double) x_mid;
local_info.y2=(double) y_mid;
- (void) PlasmaImageProxy(image,random_info,&local_info,attenuate,depth);
+ (void) PlasmaImageProxy(image,image_view,random_info,&local_info,
+ attenuate,depth);
local_info=(*segment);
local_info.y1=(double) y_mid;
local_info.x2=(double) x_mid;
- (void) PlasmaImageProxy(image,random_info,&local_info,attenuate,depth);
+ (void) PlasmaImageProxy(image,image_view,random_info,&local_info,
+ attenuate,depth);
local_info=(*segment);
local_info.x1=(double) x_mid;
local_info.y2=(double) y_mid;
- (void) PlasmaImageProxy(image,random_info,&local_info,attenuate,depth);
+ (void) PlasmaImageProxy(image,image_view,random_info,&local_info,
+ attenuate,depth);
local_info=(*segment);
local_info.x1=(double) x_mid;
local_info.y1=(double) y_mid;
- return(PlasmaImageProxy(image,random_info,&local_info,attenuate,depth));
+ return(PlasmaImageProxy(image,image_view,random_info,&local_info,
+ attenuate,depth));
}
- if (SetImageStorageClass(image,DirectClass) == MagickFalse)
- return(MagickFalse);
x_mid=(ssize_t) ceil((segment->x1+segment->x2)/2-0.5);
y_mid=(ssize_t) ceil((segment->y1+segment->y2)/2-0.5);
if ((segment->x1 == (double) x_mid) && (segment->x2 == (double) x_mid) &&
Left pixel.
*/
x=(ssize_t) ceil(segment->x1-0.5);
- (void) GetOneVirtualPixel(image,x,(ssize_t) ceil(segment->y1-0.5),&u,
- exception);
- (void) GetOneVirtualPixel(image,x,(ssize_t) ceil(segment->y2-0.5),&v,
- exception);
- q=QueueAuthenticPixels(image,x,y_mid,1,1,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,x,(ssize_t)
+ ceil(segment->y1-0.5),&u,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,x,(ssize_t)
+ ceil(segment->y2-0.5),&v,exception);
+ q=QueueCacheViewAuthenticPixels(image_view,x,y_mid,1,1,exception);
if (q == (PixelPacket *) NULL)
return(MagickTrue);
q->red=PlasmaPixel(random_info,(MagickRealType) (u.red+v.red)/2.0,
plasma);
q->blue=PlasmaPixel(random_info,(MagickRealType) (u.blue+v.blue)/2.0,
plasma);
- (void) SyncAuthenticPixels(image,exception);
+ (void) SyncCacheViewAuthenticPixels(image_view,exception);
if (segment->x1 != segment->x2)
{
/*
Right pixel.
*/
x=(ssize_t) ceil(segment->x2-0.5);
- (void) GetOneVirtualPixel(image,x,(ssize_t) ceil(segment->y1-0.5),&u,
- exception);
- (void) GetOneVirtualPixel(image,x,(ssize_t) ceil(segment->y2-0.5),&v,
- exception);
- q=QueueAuthenticPixels(image,x,y_mid,1,1,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,x,(ssize_t)
+ ceil(segment->y1-0.5),&u,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,x,(ssize_t)
+ ceil(segment->y2-0.5),&v,exception);
+ q=QueueCacheViewAuthenticPixels(image_view,x,y_mid,1,1,exception);
if (q == (PixelPacket *) NULL)
return(MagickTrue);
q->red=PlasmaPixel(random_info,(MagickRealType) (u.red+v.red)/2.0,
q->green=PlasmaPixel(random_info,(MagickRealType) (u.green+v.green)/
2.0,plasma);
q->blue=PlasmaPixel(random_info,(MagickRealType) (u.blue+v.blue)/2.0,
- plasma);
- (void) SyncAuthenticPixels(image,exception);
+ plasma);
+ (void) SyncCacheViewAuthenticPixels(image_view,exception);
}
}
if ((segment->y1 != (double) y_mid) || (segment->y2 != (double) y_mid))
Bottom pixel.
*/
y=(ssize_t) ceil(segment->y2-0.5);
- (void) GetOneVirtualPixel(image,(ssize_t) ceil(segment->x1-0.5),y,&u,
- exception);
- (void) GetOneVirtualPixel(image,(ssize_t) ceil(segment->x2-0.5),y,&v,
- exception);
- q=QueueAuthenticPixels(image,x_mid,y,1,1,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t)
+ ceil(segment->x1-0.5),y,&u,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t)
+ ceil(segment->x2-0.5),y,&v,exception);
+ q=QueueCacheViewAuthenticPixels(image_view,x_mid,y,1,1,exception);
if (q == (PixelPacket *) NULL)
return(MagickTrue);
q->red=PlasmaPixel(random_info,(MagickRealType) (u.red+v.red)/2.0,
2.0,plasma);
q->blue=PlasmaPixel(random_info,(MagickRealType) (u.blue+v.blue)/2.0,
plasma);
- (void) SyncAuthenticPixels(image,exception);
+ (void) SyncCacheViewAuthenticPixels(image_view,exception);
}
if (segment->y1 != segment->y2)
{
Top pixel.
*/
y=(ssize_t) ceil(segment->y1-0.5);
- (void) GetOneVirtualPixel(image,(ssize_t) ceil(segment->x1-0.5),y,&u,
- exception);
- (void) GetOneVirtualPixel(image,(ssize_t) ceil(segment->x2-0.5),y,&v,
- exception);
- q=QueueAuthenticPixels(image,x_mid,y,1,1,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t)
+ ceil(segment->x1-0.5),y,&u,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,(ssize_t)
+ ceil(segment->x2-0.5),y,&v,exception);
+ q=QueueCacheViewAuthenticPixels(image_view,x_mid,y,1,1,exception);
if (q == (PixelPacket *) NULL)
return(MagickTrue);
q->red=PlasmaPixel(random_info,(MagickRealType) (u.red+v.red)/2.0,
2.0,plasma);
q->blue=PlasmaPixel(random_info,(MagickRealType) (u.blue+v.blue)/2.0,
plasma);
- (void) SyncAuthenticPixels(image,exception);
+ (void) SyncCacheViewAuthenticPixels(image_view,exception);
}
}
if ((segment->x1 != segment->x2) || (segment->y1 != segment->y2))
(void) GetOneVirtualPixel(image,x,y,&u,exception);
x=(ssize_t) ceil(segment->x2-0.5);
y=(ssize_t) ceil(segment->y2-0.5);
- (void) GetOneVirtualPixel(image,x,y,&v,exception);
- q=QueueAuthenticPixels(image,x_mid,y_mid,1,1,exception);
+ (void) GetOneCacheViewVirtualPixel(image_view,x,y,&v,exception);
+ q=QueueCacheViewAuthenticPixels(image_view,x_mid,y_mid,1,1,exception);
if (q == (PixelPacket *) NULL)
return(MagickTrue);
q->red=PlasmaPixel(random_info,(MagickRealType) (u.red+v.red)/2.0,
plasma);
q->blue=PlasmaPixel(random_info,(MagickRealType) (u.blue+v.blue)/2.0,
plasma);
- (void) SyncAuthenticPixels(image,exception);
+ (void) SyncCacheViewAuthenticPixels(image_view,exception);
}
if (((segment->x2-segment->x1) < 3.0) && ((segment->y2-segment->y1) < 3.0))
return(MagickTrue);
MagickExport MagickBooleanType PlasmaImage(Image *image,
const SegmentInfo *segment,size_t attenuate,size_t depth)
{
+ CacheView
+ *image_view;
+
MagickBooleanType
status;
assert(image->signature == MagickSignature);
if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
+ if (SetImageStorageClass(image,DirectClass) == MagickFalse)
+ return(MagickFalse);
+ image_view=AcquireCacheView(image);
random_info=AcquireRandomInfo();
- status=PlasmaImageProxy(image,random_info,segment,attenuate,depth);
+ status=PlasmaImageProxy(image,image_view,random_info,segment,attenuate,depth);
random_info=DestroyRandomInfo(random_info);
+ image_view=DestroyCacheView(image_view);
return(status);
}
\f
caption=InterpretImageProperties((ImageInfo *) NULL,(Image *) image,
value);
(void) CloneString(&annotate_info->text,caption);
- count=FormatMagickCaption(caption_image,annotate_info,&metrics,&caption);
+ count=FormatMagickCaption(caption_image,annotate_info,MagickTrue,&metrics,
+ &caption);
status=SetImageExtent(caption_image,image->columns,(size_t)
((count+1)*(metrics.ascent-metrics.descent)+0.5));
if (status == MagickFalse)
#endif
for (y=0; y < (ssize_t) random_image->rows; y++)
{
- int
- id;
+ const int
+ id = GetOpenMPThreadId();
MagickPixelPacket
pixel;
}
indexes=GetCacheViewAuthenticIndexQueue(random_view);
pixel=zero;
- id=GetOpenMPThreadId();
for (x=0; x < (ssize_t) random_image->columns; x++)
{
pixel.red=(MagickRealType) (QuantumRange*
MagickExport Image *SteganoImage(const Image *image,const Image *watermark,
ExceptionInfo *exception)
{
-#define GetBit(alpha,i) ((((size_t) (alpha) >> (size_t) \
- (i)) & 0x01) != 0)
+#define GetBit(alpha,i) ((((size_t) (alpha) >> (size_t) (i)) & 0x01) != 0)
#define SetBit(alpha,i,set) (alpha)=(Quantum) ((set) != 0 ? (size_t) (alpha) \
| (one << (size_t) (i)) : (size_t) (alpha) & ~(one << (size_t) (i)))
#define SteganoImageTag "Stegano/Image"
+ CacheView
+ *stegano_view,
+ *watermark_view;
+
Image
*stegano_image;
int
c;
- ssize_t
- i,
- j,
- k,
- y;
-
MagickBooleanType
status;
PixelPacket
pixel;
- register ssize_t
- x;
-
register PixelPacket
*q;
+ register ssize_t
+ x;
+
size_t
depth,
one;
+ ssize_t
+ i,
+ j,
+ k,
+ y;
+
/*
Initialize steganographic image attributes.
*/
j=0;
depth=stegano_image->depth;
k=image->offset;
+ watermark_view=AcquireCacheView(watermark);
+ stegano_view=AcquireCacheView(stegano_image);
for (i=(ssize_t) depth-1; (i >= 0) && (j < (ssize_t) depth); i--)
{
for (y=0; (y < (ssize_t) watermark->rows) && (j < (ssize_t) depth); y++)
{
for (x=0; (x < (ssize_t) watermark->columns) && (j < (ssize_t) depth); x++)
{
- (void) GetOneVirtualPixel(watermark,x,y,&pixel,exception);
+ (void) GetOneCacheViewVirtualPixel(watermark_view,x,y,&pixel,exception);
if ((k/(ssize_t) stegano_image->columns) >= (ssize_t) stegano_image->rows)
break;
- q=GetAuthenticPixels(stegano_image,k % (ssize_t) stegano_image->columns,
- k/(ssize_t) stegano_image->columns,1,1,exception);
+ q=GetCacheViewAuthenticPixels(stegano_view,k % (ssize_t)
+ stegano_image->columns,k/(ssize_t) stegano_image->columns,1,1,
+ exception);
if (q == (PixelPacket *) NULL)
break;
switch (c)
break;
}
}
- if (SyncAuthenticPixels(stegano_image,exception) == MagickFalse)
+ if (SyncCacheViewAuthenticPixels(stegano_view,exception) == MagickFalse)
break;
c++;
if (c == 3)
status=MagickFalse;
}
}
+ stegano_view=DestroyCacheView(stegano_view);
+ watermark_view=DestroyCacheView(watermark_view);
if (stegano_image->storage_class == PseudoClass)
(void) SyncImage(stegano_image);
return(stegano_image);
#endif
for (y=0; y < (ssize_t) image->rows; y++)
{
- int
- id;
+ const int
+ id = GetOpenMPThreadId();
MagickPixelPacket
pixel;
swirl_indexes=GetCacheViewAuthenticIndexQueue(swirl_view);
delta.y=scale.y*(double) (y-center.y);
pixel=zero;
- id=GetOpenMPThreadId();
for (x=0; x < (ssize_t) image->columns; x++)
{
/*
#endif
for (y=0; y < (ssize_t) wave_image->rows; y++)
{
- int
- id;
+ const int
+ id = GetOpenMPThreadId();
MagickPixelPacket
pixel;
}
indexes=GetCacheViewAuthenticIndexQueue(wave_view);
pixel=zero;
- id=GetOpenMPThreadId();
for (x=0; x < (ssize_t) wave_image->columns; x++)
{
(void) ResamplePixelColor(resample_filter[id],(double) x,(double) (y-