846
847
resize_view=AcquireCacheView(resize_image);
847
848
for (y=0; y < (long) resize_image->rows; y++)
849
q=SetCacheViewPixels(resize_view,0,y,resize_image->columns,1);
850
q=QueueCacheViewAuthenticPixels(resize_view,0,y,resize_image->columns,1,
850
852
if (q == (PixelPacket *) NULL)
852
resize_indexes=GetCacheViewIndexes(resize_view);
854
resize_indexes=GetCacheViewAuthenticIndexQueue(resize_view);
853
855
offset.y=((MagickRealType) y*image->rows/resize_image->rows);
854
856
for (x=0; x < (long) resize_image->columns; x++)
859
861
SetPixelPacket(resize_image,&pixel,q,resize_indexes+x);
862
if (SyncCacheViewPixels(resize_view) == MagickFalse)
864
if (SyncCacheViewAuthenticPixels(resize_view,exception) == MagickFalse)
864
866
proceed=SetImageProgress(image,AdaptiveResizeImageTag,y,image->rows);
865
867
if (proceed == MagickFalse)
1183
1185
assert(resize_filter != (ResizeFilter *) NULL);
1184
1186
assert(resize_filter->signature == MagickSignature);
1185
blur=fabs(x)/resize_filter->blur; /* X position with blur scaling */
1187
blur=fabs(x)/resize_filter->blur; /* X offset with blur scaling */
1186
1188
if ((resize_filter->window_support < MagickEpsilon) ||
1187
1189
(resize_filter->window == Box))
1188
scale=1.0; /* Point/Box Filter -- avoid division by zero */
1190
scale=1.0; /* Point/Box Filter -- avoid division by zero */
1191
1193
scale=resize_filter->scale/resize_filter->window_support;
1192
1194
scale=resize_filter->window(blur*scale,resize_filter);
1195
Weighting for the filter at this position.
1197
1196
return(scale*resize_filter->filter(blur,resize_filter));
1506
1505
(void) lqr_carver_scan_reset(carver);
1507
1506
while (lqr_carver_scan(carver,&x,&y,&packet) != 0)
1509
q=SetImagePixels(rescale_image,x,y,1,1);
1508
q=QueueAuthenticPixels(rescale_image,x,y,1,1,exception);
1510
1509
if (q == (PixelPacket *) NULL)
1512
rescale_indexes=GetIndexes(rescale_image);
1511
rescale_indexes=GetAuthenticIndexQueue(rescale_image);
1513
1512
pixel.red=QuantumRange*(packet[0]/255.0);
1514
1513
pixel.green=QuantumRange*(packet[1]/255.0);
1515
1514
pixel.blue=QuantumRange*(packet[2]/255.0);
1564
1563
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1566
% ResizeImage() scales an image to the desired dimensions, using
1567
% the given filter (see AcquireFilterInfo() ).
1565
% ResizeImage() scales an image to the desired dimensions, using the given
1566
% filter (see AcquireFilterInfo() ).
1569
1568
% If an undefined filter is given the filter defaults to Mitchell for a
1570
1569
% colormapped image, a image with a matte channel, or if the image is
1626
1625
ContributionInfo
1627
1626
**contribution;
1629
contribution=(ContributionInfo **) AcquireQuantumMemory(
1630
GetCacheViewMaximumThreads(),sizeof(*contribution));
1631
number_threads=GetPixelCacheMaximumThreads();
1632
contribution=(ContributionInfo **) AcquireQuantumMemory(number_threads,
1633
sizeof(*contribution));
1631
1634
if (contribution == (ContributionInfo **) NULL)
1632
1635
return((ContributionInfo **) NULL);
1633
(void) ResetMagickMemory(contribution,0,GetCacheViewMaximumThreads()*
1634
sizeof(*contribution));
1635
for (i=0; i < (long) GetCacheViewMaximumThreads(); i++)
1636
(void) ResetMagickMemory(contribution,0,number_threads*sizeof(*contribution));
1637
for (i=0; i < (long) number_threads; i++)
1637
1639
contribution[i]=(ContributionInfo *) AcquireQuantumMemory(count,
1638
1640
sizeof(**contribution));
1704
1706
support=(MagickRealType) 0.5;
1707
contribution=AcquireContributionThreadSet((size_t) (2.0*support+3.0));
1708
if (contribution == (ContributionInfo **) NULL)
1709
contributions=AcquireContributionThreadSet((size_t) (2.0*support+3.0));
1710
if (contributions == (ContributionInfo **) NULL)
1710
1712
(void) ThrowMagickException(exception,GetMagickModule(),
1711
1713
ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
1714
1716
status=MagickTrue;
1715
1717
scale=1.0/scale;
1716
1718
(void) ResetMagickMemory(&zero,0,sizeof(zero));
1717
image_view=AcquireCacheViewThreadSet(image);
1718
resize_view=AcquireCacheViewThreadSet(resize_image);
1719
image_view=AcquireCacheView(image);
1720
resize_view=AcquireCacheView(resize_image);
1719
1721
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1720
1722
#pragma omp parallel for shared(status)
1722
1724
for (x=0; x < (long) resize_image->columns; x++)
1753
1757
if (status == MagickFalse)
1755
id=GetCacheViewThreadId();
1759
contribution=contributions[GetPixelCacheThreadId()];
1756
1760
for (n=0; n < (stop-start); n++)
1758
contribution[id][n].pixel=start+n;
1759
contribution[id][n].weight=GetResizeFilterWeight(resize_filter,scale*
1762
contribution[n].pixel=start+n;
1763
contribution[n].weight=GetResizeFilterWeight(resize_filter,scale*
1760
1764
((MagickRealType) (start+n)-center+0.5));
1761
density+=contribution[id][n].weight;
1765
density+=contribution[n].weight;
1763
1767
if ((density != 0.0) && (density != 1.0))
1771
1775
density=1.0/density;
1772
1776
for (i=0; i < n; i++)
1773
contribution[id][i].weight*=density;
1777
contribution[i].weight*=density;
1775
p=AcquireCacheViewPixels(image_view[id],contribution[id][0].pixel,0,
1776
(unsigned long) (contribution[id][n-1].pixel-contribution[id][0].pixel+1),
1779
p=GetCacheViewVirtualPixels(image_view,contribution[0].pixel,0,
1780
(unsigned long) (contribution[n-1].pixel-contribution[0].pixel+1),
1777
1781
image->rows,exception);
1778
q=SetCacheViewPixels(resize_view[id],x,0,1,resize_image->rows);
1782
q=QueueCacheViewAuthenticPixels(resize_view,x,0,1,resize_image->rows,
1779
1784
if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
1781
1786
status=MagickFalse;
1784
indexes=AcquireCacheViewIndexes(image_view[id]);
1785
resize_indexes=GetCacheViewIndexes(resize_view[id]);
1789
indexes=GetCacheViewVirtualIndexQueue(image_view);
1790
resize_indexes=GetCacheViewAuthenticIndexQueue(resize_view);
1786
1791
for (y=0; y < (long) resize_image->rows; y++)
1803
1808
for (i=0; i < n; i++)
1805
j=y*(contribution[id][n-1].pixel-contribution[id][0].pixel+1)+
1806
(contribution[id][i].pixel-contribution[id][0].pixel);
1807
alpha=contribution[id][i].weight;
1810
j=y*(contribution[n-1].pixel-contribution[0].pixel+1)+
1811
(contribution[i].pixel-contribution[0].pixel);
1812
alpha=contribution[i].weight;
1808
1813
pixel.red+=alpha*(p+j)->red;
1809
1814
pixel.green+=alpha*(p+j)->green;
1810
1815
pixel.blue+=alpha*(p+j)->blue;
1820
1825
for (i=0; i < n; i++)
1822
j=y*(contribution[id][n-1].pixel-contribution[id][0].pixel+1)+
1823
(contribution[id][i].pixel-contribution[id][0].pixel);
1824
alpha=contribution[id][i].weight;
1827
j=y*(contribution[n-1].pixel-contribution[0].pixel+1)+
1828
(contribution[i].pixel-contribution[0].pixel);
1829
alpha=contribution[i].weight;
1825
1830
pixel.index+=alpha*indexes[j];
1827
1832
resize_indexes[y]=(IndexPacket) RoundToQuantum(pixel.index);
1836
1841
for (i=0; i < n; i++)
1838
j=y*(contribution[id][n-1].pixel-contribution[id][0].pixel+1)+
1839
(contribution[id][i].pixel-contribution[id][0].pixel);
1840
alpha=contribution[id][i].weight*QuantumScale*((MagickRealType)
1843
j=y*(contribution[n-1].pixel-contribution[0].pixel+1)+
1844
(contribution[i].pixel-contribution[0].pixel);
1845
alpha=contribution[i].weight*QuantumScale*((MagickRealType)
1841
1846
QuantumRange-(p+j)->opacity);
1842
1847
pixel.red+=alpha*(p+j)->red;
1843
1848
pixel.green+=alpha*(p+j)->green;
1844
1849
pixel.blue+=alpha*(p+j)->blue;
1845
pixel.opacity+=contribution[id][i].weight*(p+j)->opacity;
1850
pixel.opacity+=contribution[i].weight*(p+j)->opacity;
1848
1853
gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
1870
1875
i=(long) (MagickMin(MagickMax(center,(double) start),(double) stop-
1872
j=y*(contribution[id][n-1].pixel-contribution[id][0].pixel+1)+
1873
(contribution[id][i-start].pixel-contribution[id][0].pixel);
1877
j=y*(contribution[n-1].pixel-contribution[0].pixel+1)+
1878
(contribution[i-start].pixel-contribution[0].pixel);
1874
1879
resize_indexes[y]=indexes[j];
1878
if (SyncCacheViewPixels(resize_view[id]) == MagickFalse)
1883
if (SyncCacheViewAuthenticPixels(resize_view,exception) == MagickFalse)
1879
1884
status=MagickFalse;
1880
1885
if (image->progress_monitor != (MagickProgressMonitor) NULL)
1885
1890
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1886
#pragma omp critical
1891
#pragma omp critical (MagickCore_HorizontalFilter)
1888
1893
proceed=SetImageProgress(image,ResizeImageTag,(*quantum)++,span);
1889
1894
if (proceed == MagickFalse)
1890
1895
status=MagickFalse;
1893
resize_view=DestroyCacheViewThreadSet(resize_view);
1894
image_view=DestroyCacheViewThreadSet(image_view);
1895
contribution=DestroyContributionThreadSet(contribution);
1898
resize_view=DestroyCacheView(resize_view);
1899
image_view=DestroyCacheView(image_view);
1900
contributions=DestroyContributionThreadSet(contributions);
1896
1901
return(status);
1942
1947
support=(MagickRealType) 0.5;
1945
contribution=AcquireContributionThreadSet((size_t) (2.0*support+3.0));
1946
if (contribution == (ContributionInfo **) NULL)
1950
contributions=AcquireContributionThreadSet((size_t) (2.0*support+3.0));
1951
if (contributions == (ContributionInfo **) NULL)
1948
1953
(void) ThrowMagickException(exception,GetMagickModule(),
1949
1954
ResourceLimitError,"MemoryAllocationFailed","`%s'",image->filename);
1952
1957
status=MagickTrue;
1953
1958
scale=1.0/scale;
1954
1959
(void) ResetMagickMemory(&zero,0,sizeof(zero));
1955
image_view=AcquireCacheViewThreadSet(image);
1956
resize_view=AcquireCacheViewThreadSet(resize_image);
1960
image_view=AcquireCacheView(image);
1961
resize_view=AcquireCacheView(resize_image);
1957
1962
#if defined(MAGICKCORE_OPENMP_SUPPORT)
1958
1963
#pragma omp parallel for shared(status)
1960
1965
for (y=0; y < (long) resize_image->rows; y++)
1991
1998
if (status == MagickFalse)
1993
id=GetCacheViewThreadId();
2000
contribution=contributions[GetPixelCacheThreadId()];
1994
2001
for (n=0; n < (stop-start); n++)
1996
contribution[id][n].pixel=start+n;
1997
contribution[id][n].weight=GetResizeFilterWeight(resize_filter,scale*
2003
contribution[n].pixel=start+n;
2004
contribution[n].weight=GetResizeFilterWeight(resize_filter,scale*
1998
2005
((MagickRealType) (start+n)-center+0.5));
1999
density+=contribution[id][n].weight;
2006
density+=contribution[n].weight;
2001
2008
if ((density != 0.0) && (density != 1.0))
2009
2016
density=1.0/density;
2010
2017
for (i=0; i < n; i++)
2011
contribution[id][i].weight*=density;
2018
contribution[i].weight*=density;
2013
p=AcquireCacheViewPixels(image_view[id],0,contribution[id][0].pixel,
2014
image->columns,(unsigned long) (contribution[id][n-1].pixel-
2015
contribution[id][0].pixel+1),exception);
2016
q=SetCacheViewPixels(resize_view[id],0,y,resize_image->columns,1);
2020
p=GetCacheViewVirtualPixels(image_view,0,contribution[0].pixel,
2021
image->columns,(unsigned long) (contribution[n-1].pixel-
2022
contribution[0].pixel+1),exception);
2023
q=QueueCacheViewAuthenticPixels(resize_view,0,y,resize_image->columns,1,
2017
2025
if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
2019
2027
status=MagickFalse;
2022
indexes=AcquireCacheViewIndexes(image_view[id]);
2023
resize_indexes=GetCacheViewIndexes(resize_view[id]);
2030
indexes=GetCacheViewVirtualIndexQueue(image_view);
2031
resize_indexes=GetCacheViewAuthenticIndexQueue(resize_view);
2024
2032
for (x=0; x < (long) resize_image->columns; x++)
2074
2082
for (i=0; i < n; i++)
2076
j=(long) ((contribution[id][i].pixel-contribution[id][0].pixel)*
2084
j=(long) ((contribution[i].pixel-contribution[0].pixel)*
2077
2085
image->columns+x);
2078
alpha=contribution[id][i].weight*QuantumScale*((MagickRealType)
2086
alpha=contribution[i].weight*QuantumScale*((MagickRealType)
2079
2087
QuantumRange-(p+j)->opacity);
2080
2088
pixel.red+=alpha*(p+j)->red;
2081
2089
pixel.green+=alpha*(p+j)->green;
2082
2090
pixel.blue+=alpha*(p+j)->blue;
2083
pixel.opacity+=contribution[id][i].weight*(p+j)->opacity;
2091
pixel.opacity+=contribution[i].weight*(p+j)->opacity;
2086
2094
gamma=1.0/(fabs((double) gamma) <= MagickEpsilon ? 1.0 : gamma);
2108
2116
i=(long) (MagickMin(MagickMax(center,(double) start),(double) stop-
2110
j=(long) ((contribution[id][i-start].pixel-contribution[id][0].pixel)*
2118
j=(long) ((contribution[i-start].pixel-contribution[0].pixel)*
2111
2119
image->columns+x);
2112
2120
resize_indexes[x]=indexes[j];
2116
if (SyncCacheViewPixels(resize_view[id]) == MagickFalse)
2124
if (SyncCacheViewAuthenticPixels(resize_view,exception) == MagickFalse)
2117
2125
status=MagickFalse;
2118
2126
if (image->progress_monitor != (MagickProgressMonitor) NULL)
2123
2131
#if defined(MAGICKCORE_OPENMP_SUPPORT)
2124
#pragma omp critical
2132
#pragma omp critical (MagickCore_VerticalFilter)
2126
2134
proceed=SetImageProgress(image,ResizeImageTag,(*quantum)++,span);
2127
2135
if (proceed == MagickFalse)
2128
2136
status=MagickFalse;
2131
resize_view=DestroyCacheViewThreadSet(resize_view);
2132
image_view=DestroyCacheViewThreadSet(image_view);
2133
contribution=DestroyContributionThreadSet(contribution);
2139
resize_view=DestroyCacheView(resize_view);
2140
image_view=DestroyCacheView(image_view);
2141
contributions=DestroyContributionThreadSet(contributions);
2134
2142
return(status);
2175
2185
if ((columns == image->columns) && (rows == image->rows) &&
2176
2186
(filter == UndefinedFilter) && (blur == 1.0))
2177
2187
return(CloneImage(image,0,0,MagickTrue,exception));
2188
resize_image=CloneImage(image,columns,rows,MagickTrue,exception);
2189
if (resize_image == (Image *) NULL)
2190
return(resize_image);
2192
Acquire resize filter.
2178
2194
x_factor=(MagickRealType) columns/(MagickRealType) image->columns;
2179
2195
y_factor=(MagickRealType) rows/(MagickRealType) image->rows;
2196
if ((x_factor*y_factor) > WorkLoadFactor)
2197
filter_image=CloneImage(image,columns,image->rows,MagickTrue,exception);
2199
filter_image=CloneImage(image,image->columns,rows,MagickTrue,exception);
2200
if (filter_image == (Image *) NULL)
2201
return(DestroyImage(resize_image));
2180
2202
filter_type=LanczosFilter;
2181
2203
if (filter != UndefinedFilter)
2182
2204
filter_type=filter;
2196
if ((columns*((MagickSizeType) image->rows+rows)) >
2197
(rows*((MagickSizeType) image->columns+columns)))
2218
if ((x_factor*y_factor) > WorkLoadFactor)
2199
filter_image=CloneImage(image,columns,image->rows,MagickTrue,exception);
2200
if (filter_image == (Image *) NULL)
2202
resize_filter=DestroyResizeFilter(resize_filter);
2203
return((Image *) NULL);
2205
2220
span=(MagickSizeType) (filter_image->columns+rows);
2206
2221
status=HorizontalFilter(resize_filter,image,filter_image,x_factor,span,
2207
2222
&quantum,exception);
2208
resize_image=CloneImage(image,columns,rows,MagickTrue,exception);
2209
if (resize_image != (Image *) NULL)
2210
status|=VerticalFilter(resize_filter,filter_image,resize_image,y_factor,
2211
span,&quantum,exception);
2223
status&=VerticalFilter(resize_filter,filter_image,resize_image,y_factor,
2224
span,&quantum,exception);
2215
filter_image=CloneImage(image,image->columns,rows,MagickTrue,exception);
2216
if (filter_image == (Image *) NULL)
2218
resize_filter=DestroyResizeFilter(resize_filter);
2219
return((Image *) NULL);
2221
2228
span=(MagickSizeType) (filter_image->rows+columns);
2222
2229
status=VerticalFilter(resize_filter,image,filter_image,y_factor,span,
2223
2230
&quantum,exception);
2224
resize_image=CloneImage(image,columns,rows,MagickTrue,exception);
2225
if (resize_image != (Image *) NULL)
2226
status|=HorizontalFilter(resize_filter,filter_image,resize_image,
2227
x_factor,span,&quantum,exception);
2231
status&=HorizontalFilter(resize_filter,filter_image,resize_image,x_factor,
2232
span,&quantum,exception);
2230
2235
Free resources.
2232
2237
filter_image=DestroyImage(filter_image);
2233
2238
resize_filter=DestroyResizeFilter(resize_filter);
2234
if (status == MagickFalse)
2236
if (resize_image != (Image *) NULL)
2237
resize_image=DestroyImage(resize_image);
2238
ThrowImageException(ResourceLimitError,"MemoryAllocationFailed");
2239
if ((status == MagickFalse) || (resize_image == (Image *) NULL))
2240
return((Image *) NULL);
2240
2241
resize_image->type=image->type;
2241
2242
return(resize_image);
2345
2346
Sample each row.
2348
pixels=AcquireImagePixels(image,0,0,image->columns,1,exception);
2349
indexes=AcquireIndexes(image);
2349
pixels=GetVirtualPixels(image,0,0,image->columns,1,exception);
2350
indexes=GetVirtualIndexQueue(image);
2350
2351
for (y=0; y < (long) sample_image->rows; y++)
2352
sample_pixels=SetImagePixels(sample_image,0,y,sample_image->columns,1);
2353
sample_pixels=QueueAuthenticPixels(sample_image,0,y,sample_image->columns,1,
2353
2355
if (sample_pixels == (PixelPacket *) NULL)
2355
sample_indexes=GetIndexes(sample_image);
2357
sample_indexes=GetAuthenticIndexQueue(sample_image);
2356
2358
if (j != y_offset[y])
2359
2361
Read a scan line.
2362
pixels=AcquireImagePixels(image,0,j,image->columns,1,exception);
2364
pixels=GetVirtualPixels(image,0,j,image->columns,1,exception);
2363
2365
if (pixels == (const PixelPacket *) NULL)
2365
indexes=AcquireIndexes(image);
2367
indexes=GetVirtualIndexQueue(image);
2368
2370
Sample each column.
2373
2375
(image->colorspace == CMYKColorspace))
2374
2376
for (x=0; x < (long) sample_image->columns; x++)
2375
2377
sample_indexes[x]=indexes[x_offset[x]];
2376
if (SyncImagePixels(sample_image) == MagickFalse)
2378
if (SyncAuthenticPixels(sample_image,exception) == MagickFalse)
2378
2380
proceed=SetImageProgress(image,SampleImageTag,y,image->rows);
2379
2381
if (proceed == MagickFalse)
2521
2527
for (y=0; y < (long) scale_image->rows; y++)
2523
q=SetImagePixels(scale_image,0,y,scale_image->columns,1);
2529
q=QueueAuthenticPixels(scale_image,0,y,scale_image->columns,1,exception);
2524
2530
if (q == (PixelPacket *) NULL)
2526
scale_indexes=GetIndexes(scale_image);
2532
scale_indexes=GetAuthenticIndexQueue(scale_image);
2527
2533
if (scale_image->rows == image->rows)
2530
2536
Read a new scanline.
2532
p=AcquireImagePixels(image,0,i++,image->columns,1,exception);
2538
p=GetVirtualPixels(image,0,i++,image->columns,1,exception);
2533
2539
if (p == (const PixelPacket *) NULL)
2535
indexes=AcquireIndexes(image);
2541
indexes=GetVirtualIndexQueue(image);
2536
2542
for (x=0; x < (long) image->columns; x++)
2538
2544
x_vector[x].red=(MagickRealType) p->red;
2558
2564
Read a new scanline.
2560
p=AcquireImagePixels(image,0,i++,image->columns,1,exception);
2566
p=GetVirtualPixels(image,0,i++,image->columns,1,exception);
2561
2567
if (p == (const PixelPacket *) NULL)
2563
indexes=AcquireIndexes(image);
2569
indexes=GetVirtualIndexQueue(image);
2564
2570
for (x=0; x < (long) image->columns; x++)
2566
2572
x_vector[x].red=(MagickRealType) p->red;
2594
2600
Read a new scanline.
2596
p=AcquireImagePixels(image,0,i++,image->columns,1,exception);
2602
p=GetVirtualPixels(image,0,i++,image->columns,1,exception);
2597
2603
if (p == (const PixelPacket *) NULL)
2599
indexes=AcquireIndexes(image);
2605
indexes=GetVirtualIndexQueue(image);
2600
2606
for (x=0; x < (long) image->columns; x++)
2602
2608
x_vector[x].red=(MagickRealType) p->red;
2743
2749
t=scale_scanline;
2744
2750
for (x=0; x < (long) scale_image->columns; x++)
2746
q->red=RoundToQuantum(t->red);
2747
q->green=RoundToQuantum(t->green);
2748
q->blue=RoundToQuantum(t->blue);
2753
if (image->matte != MagickFalse)
2754
alpha=(MagickRealType) (QuantumScale*(QuantumRange-t->opacity));
2755
gamma=1.0/(fabs((double) alpha) <= MagickEpsilon ? 1.0 : alpha);
2756
q->red=RoundToQuantum(gamma*t->red);
2757
q->green=RoundToQuantum(gamma*t->green);
2758
q->blue=RoundToQuantum(gamma*t->blue);
2749
2759
if (scale_image->matte != MagickFalse)
2750
2760
q->opacity=RoundToQuantum(t->opacity);
2751
2761
if (scale_indexes != (IndexPacket *) NULL)
2752
scale_indexes[x]=(IndexPacket) RoundToQuantum(t->index);
2762
scale_indexes[x]=(IndexPacket) RoundToQuantum(gamma*t->index);
2757
if (SyncImagePixels(scale_image) == MagickFalse)
2767
if (SyncAuthenticPixels(scale_image,exception) == MagickFalse)
2759
2769
proceed=SetImageProgress(image,ScaleImageTag,y,image->rows);
2760
2770
if (proceed == MagickFalse)