Skip to content

Commit 19651f3

Browse files
author
Cristy
committed
https://github.com/ImageMagick/ImageMagick/issues/1595
1 parent c6c454d commit 19651f3

File tree

2 files changed

+59
-46
lines changed

2 files changed

+59
-46
lines changed

Diff for: coders/gif.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -685,13 +685,15 @@ static MagickBooleanType EncodeImage(const ImageInfo *image_info,Image *image,
685685
/*
686686
Probe hash table.
687687
*/
688+
next_pixel=MagickFalse;
689+
displacement=1;
688690
index=(IndexPacket) ((size_t) GetPixelIndex(indexes+x) & 0xff);
689691
p++;
690692
k=(ssize_t) (((size_t) index << (MaxGIFBits-8))+waiting_code);
691693
if (k >= MaxHashTable)
692694
k-=MaxHashTable;
693-
next_pixel=MagickFalse;
694-
displacement=1;
695+
if (k < 0)
696+
continue;
695697
if (hash_code[k] > 0)
696698
{
697699
if ((hash_prefix[k] == waiting_code) &&

Diff for: magick/fourier.c

+55-44
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,9 @@ MagickExport Image *ComplexImages(const Image *images,const ComplexOperator op,
226226
progress=0;
227227
#if defined(MAGICKCORE_OPENMP_SUPPORT)
228228
#pragma omp parallel for schedule(static) shared(progress,status) \
229-
magick_number_threads(images,complex_images,images->rows,1L)
229+
magick_number_threads(Cr_image,complex_images,Cr_image->rows,1L)
230230
#endif
231-
for (y=0; y < (ssize_t) images->rows; y++)
231+
for (y=0; y < (ssize_t) Cr_image->rows; y++)
232232
{
233233
register const PixelPacket
234234
*magick_restrict Ai,
@@ -245,14 +245,10 @@ MagickExport Image *ComplexImages(const Image *images,const ComplexOperator op,
245245

246246
if (status == MagickFalse)
247247
continue;
248-
Ar=GetCacheViewVirtualPixels(Ar_view,0,y,
249-
MagickMax(Ar_image->columns,Cr_image->columns),1,exception);
250-
Ai=GetCacheViewVirtualPixels(Ai_view,0,y,
251-
MagickMax(Ai_image->columns,Ci_image->columns),1,exception);
252-
Br=GetCacheViewVirtualPixels(Br_view,0,y,
253-
MagickMax(Br_image->columns,Cr_image->columns),1,exception);
254-
Bi=GetCacheViewVirtualPixels(Bi_view,0,y,
255-
MagickMax(Bi_image->columns,Ci_image->columns),1,exception);
248+
Ar=GetCacheViewVirtualPixels(Ar_view,0,y,Cr_image->columns,1,exception);
249+
Ai=GetCacheViewVirtualPixels(Ai_view,0,y,Cr_image->columns,1,exception);
250+
Br=GetCacheViewVirtualPixels(Br_view,0,y,Cr_image->columns,1,exception);
251+
Bi=GetCacheViewVirtualPixels(Bi_view,0,y,Cr_image->columns,1,exception);
256252
Cr=QueueCacheViewAuthenticPixels(Cr_view,0,y,Cr_image->columns,1,exception);
257253
Ci=QueueCacheViewAuthenticPixels(Ci_view,0,y,Ci_image->columns,1,exception);
258254
if ((Ar == (const PixelPacket *) NULL) ||
@@ -264,7 +260,7 @@ MagickExport Image *ComplexImages(const Image *images,const ComplexOperator op,
264260
status=MagickFalse;
265261
continue;
266262
}
267-
for (x=0; x < (ssize_t) images->columns; x++)
263+
for (x=0; x < (ssize_t) Cr_image->columns; x++)
268264
{
269265
switch (op)
270266
{
@@ -305,55 +301,70 @@ MagickExport Image *ComplexImages(const Image *images,const ComplexOperator op,
305301
gamma;
306302

307303
gamma=PerceptibleReciprocal(Br->red*Br->red+Bi->red*Bi->red+snr);
308-
Cr->red=gamma*(Ar->red*Br->red+Ai->red*Bi->red);
309-
Ci->red=gamma*(Ai->red*Br->red-Ar->red*Bi->red);
310-
gamma=PerceptibleReciprocal(Br->green*Br->green+Bi->green*Bi->green+
311-
snr);
312-
Cr->green=gamma*(Ar->green*Br->green+Ai->green*Bi->green);
313-
Ci->green=gamma*(Ai->green*Br->green-Ar->green*Bi->green);
314-
gamma=PerceptibleReciprocal(Br->blue*Br->blue+Bi->blue*Bi->blue+snr);
315-
Cr->blue=gamma*(Ar->blue*Br->blue+Ai->blue*Bi->blue);
316-
Ci->blue=gamma*(Ai->blue*Br->blue-Ar->blue*Bi->blue);
304+
Cr->red=gamma*((double) Ar->red*Br->red+(double) Ai->red*Bi->red);
305+
Ci->red=gamma*((double) Ai->red*Br->red-(double) Ar->red*Bi->red);
306+
gamma=PerceptibleReciprocal((double) Br->green*Br->green+(double)
307+
Bi->green*Bi->green+snr);
308+
Cr->green=gamma*((double) Ar->green*Br->green+(double)
309+
Ai->green*Bi->green);
310+
Ci->green=gamma*((double) Ai->green*Br->green-(double)
311+
Ar->green*Bi->green);
312+
gamma=PerceptibleReciprocal((double) Br->blue*Br->blue+(double)
313+
Bi->blue*Bi->blue+snr);
314+
Cr->blue=gamma*((double) Ar->blue*Br->blue+(double)
315+
Ai->blue*Bi->blue);
316+
Ci->blue=gamma*((double) Ai->blue*Br->blue-(double)
317+
Ar->blue*Bi->blue);
317318
if (images->matte != MagickFalse)
318319
{
319-
gamma=PerceptibleReciprocal(Br->opacity*Br->opacity+Bi->opacity*
320-
Bi->opacity+snr);
321-
Cr->opacity=gamma*(Ar->opacity*Br->opacity+Ai->opacity*
322-
Bi->opacity);
323-
Ci->opacity=gamma*(Ai->opacity*Br->opacity-Ar->opacity*
324-
Bi->opacity);
320+
gamma=PerceptibleReciprocal((double) Br->opacity*Br->opacity+
321+
(double) Bi->opacity*Bi->opacity+snr);
322+
Cr->opacity=gamma*((double) Ar->opacity*Br->opacity+(double)
323+
Ai->opacity*Bi->opacity);
324+
Ci->opacity=gamma*((double) Ai->opacity*Br->opacity-(double)
325+
Ar->opacity*Bi->opacity);
325326
}
326327
break;
327328
}
328329
case MagnitudePhaseComplexOperator:
329330
{
330-
Cr->red=sqrt(Ar->red*Ar->red+Ai->red*Ai->red);
331-
Ci->red=atan2(Ai->red,Ar->red)/(2.0*MagickPI)+0.5;
332-
Cr->green=sqrt(Ar->green*Ar->green+Ai->green*Ai->green);
333-
Ci->green=atan2(Ai->green,Ar->green)/(2.0*MagickPI)+0.5;
334-
Cr->blue=sqrt(Ar->blue*Ar->blue+Ai->blue*Ai->blue);
331+
Cr->red=sqrt((double) Ar->red*Ar->red+(double) Ai->red*Ai->red);
332+
Ci->red=atan2((double) Ai->red,(double) Ar->red)/(2.0*MagickPI)+0.5;
333+
Cr->green=sqrt((double) Ar->green*Ar->green+(double)
334+
Ai->green*Ai->green);
335+
Ci->green=atan2((double) Ai->green,(double) Ar->green)/
336+
(2.0*MagickPI)+0.5;
337+
Cr->blue=sqrt((double) Ar->blue*Ar->blue+(double) Ai->blue*Ai->blue);
335338
Ci->blue=atan2(Ai->blue,Ar->blue)/(2.0*MagickPI)+0.5;
336339
if (images->matte != MagickFalse)
337340
{
338-
Cr->opacity=sqrt(Ar->opacity*Ar->opacity+Ai->opacity*Ai->opacity);
339-
Ci->opacity=atan2(Ai->opacity,Ar->opacity)/(2.0*MagickPI)+0.5;
341+
Cr->opacity=sqrt((double) Ar->opacity*Ar->opacity+(double)
342+
Ai->opacity*Ai->opacity);
343+
Ci->opacity=atan2((double) Ai->opacity,(double) Ar->opacity)/
344+
(2.0*MagickPI)+0.5;
340345
}
341346
break;
342347
}
343348
case MultiplyComplexOperator:
344349
{
345-
Cr->red=QuantumScale*(Ar->red*Br->red-Ai->red*Bi->red);
346-
Ci->red=QuantumScale*(Ai->red*Br->red+Ar->red*Bi->red);
347-
Cr->green=QuantumScale*(Ar->green*Br->green-Ai->green*Bi->green);
348-
Ci->green=QuantumScale*(Ai->green*Br->green+Ar->green*Bi->green);
349-
Cr->blue=QuantumScale*(Ar->blue*Br->blue-Ai->blue*Bi->blue);
350-
Ci->blue=QuantumScale*(Ai->blue*Br->blue+Ar->blue*Bi->blue);
350+
Cr->red=QuantumScale*((double) Ar->red*Br->red-(double)
351+
Ai->red*Bi->red);
352+
Ci->red=QuantumScale*((double) Ai->red*Br->red+(double)
353+
Ar->red*Bi->red);
354+
Cr->green=QuantumScale*((double) Ar->green*Br->green-(double)
355+
Ai->green*Bi->green);
356+
Ci->green=QuantumScale*((double) Ai->green*Br->green+(double)
357+
Ar->green*Bi->green);
358+
Cr->blue=QuantumScale*((double) Ar->blue*Br->blue-(double)
359+
Ai->blue*Bi->blue);
360+
Ci->blue=QuantumScale*((double) Ai->blue*Br->blue+(double)
361+
Ar->blue*Bi->blue);
351362
if (images->matte != MagickFalse)
352363
{
353-
Cr->opacity=QuantumScale*(Ar->opacity*Br->opacity-Ai->opacity*
354-
Bi->opacity);
355-
Ci->opacity=QuantumScale*(Ai->opacity*Br->opacity+Ar->opacity*
356-
Bi->opacity);
364+
Cr->opacity=QuantumScale*((double) Ar->opacity*Br->opacity-
365+
(double) Ai->opacity*Bi->opacity);
366+
Ci->opacity=QuantumScale*((double) Ai->opacity*Br->opacity+
367+
(double) Ar->opacity*Bi->opacity);
357368
}
358369
break;
359370
}
@@ -380,7 +391,7 @@ MagickExport Image *ComplexImages(const Image *images,const ComplexOperator op,
380391
Ci->green=Ai->green-Bi->green;
381392
Cr->blue=Ar->blue-Br->blue;
382393
Ci->blue=Ai->blue-Bi->blue;
383-
if (images->matte != MagickFalse)
394+
if (Cr_image->matte != MagickFalse)
384395
{
385396
Cr->opacity=Ar->opacity-Br->opacity;
386397
Ci->opacity=Ai->opacity-Bi->opacity;

0 commit comments

Comments
 (0)