diff --git a/magick/cache-private.h b/magick/cache-private.h
index bc30972..be587ec 100644
--- a/magick/cache-private.h
+++ b/magick/cache-private.h
@@ -140,6 +140,9 @@
VirtualPixelMethod
virtual_pixel_method;
+ MagickPixelPacket
+ virtual_pixel_color;
+
unsigned long
number_threads;
diff --git a/magick/cache.c b/magick/cache.c
index 182d43d..f4b7602 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -3248,6 +3248,9 @@
CacheInfo
*cache_info;
+ IndexPacket
+ virtual_index;
+
MagickOffsetType
offset;
@@ -3266,7 +3269,7 @@
region;
register const IndexPacket
- *restrict nexus_indexes;
+ *restrict virtual_indexes;
register const PixelPacket
*restrict p;
@@ -3378,6 +3381,7 @@
break;
}
}
+ virtual_index=0;
for (v=0; v < (long) rows; v++)
{
for (u=0; u < (long) columns; u+=length)
@@ -3405,6 +3409,7 @@
case WhiteVirtualPixelMethod:
{
p=(&virtual_pixel);
+ virtual_indexes=(&virtual_index);
break;
}
case EdgeVirtualPixelMethod:
@@ -3413,6 +3418,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
EdgeX(x+u,cache_info->columns),EdgeY(y+v,cache_info->rows),
1UL,1UL,virtual_nexus[0],exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case RandomVirtualPixelMethod:
@@ -3423,6 +3430,8 @@
RandomX(cache_info->random_info,cache_info->columns),
RandomY(cache_info->random_info,cache_info->rows),1UL,1UL,
virtual_nexus[0],exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case DitherVirtualPixelMethod:
@@ -3430,6 +3439,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
DitherX(x+u,cache_info->columns),DitherY(y+v,cache_info->rows),
1UL,1UL,virtual_nexus[0],exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case TileVirtualPixelMethod:
@@ -3439,6 +3450,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case MirrorVirtualPixelMethod:
@@ -3454,6 +3467,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case CheckerTileVirtualPixelMethod:
@@ -3463,11 +3478,14 @@
if (((x_modulo.quotient ^ y_modulo.quotient) & 0x01) != 0L)
{
p=(&virtual_pixel);
+ virtual_indexes=(&virtual_index);
break;
}
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case HorizontalTileVirtualPixelMethod:
@@ -3475,6 +3493,7 @@
if (((y+v) < 0) || ((y+v) >= (long) cache_info->rows))
{
p=(&virtual_pixel);
+ virtual_indexes=(&virtual_index);
break;
}
x_modulo=VirtualPixelModulo(x+u,cache_info->columns);
@@ -3482,6 +3501,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case VerticalTileVirtualPixelMethod:
@@ -3489,6 +3510,7 @@
if (((x+u) < 0) || ((x+u) >= (long) cache_info->columns))
{
p=(&virtual_pixel);
+ virtual_indexes=(&virtual_index);
break;
}
x_modulo=VirtualPixelModulo(x+u,cache_info->columns);
@@ -3496,6 +3518,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
x_modulo.remainder,y_modulo.remainder,1UL,1UL,virtual_nexus[0],
exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case HorizontalTileEdgeVirtualPixelMethod:
@@ -3504,6 +3528,8 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
x_modulo.remainder,EdgeY(y+v,cache_info->rows),1UL,1UL,
virtual_nexus[0],exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
case VerticalTileEdgeVirtualPixelMethod:
@@ -3512,19 +3538,17 @@
p=GetVirtualPixelsFromNexus(image,virtual_pixel_method,
EdgeX(x+u,cache_info->columns),y_modulo.remainder,1UL,1UL,
virtual_nexus[0],exception);
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,
+ virtual_nexus[0]);
break;
}
}
if (p == (const PixelPacket *) NULL)
break;
*q++=(*p);
- if (indexes != (IndexPacket *) NULL)
- {
- nexus_indexes=GetVirtualIndexesFromNexus(cache_info,
- virtual_nexus[0]);
- if (nexus_indexes != (const IndexPacket *) NULL)
- *indexes++=(*nexus_indexes);
- }
+ if ((indexes != (IndexPacket *) NULL) &&
+ (virtual_indexes != (const IndexPacket *) NULL))
+ *indexes++=(*virtual_indexes);
continue;
}
/*
@@ -3534,17 +3558,15 @@
(unsigned long) length,1UL,virtual_nexus[0],exception);
if (p == (const PixelPacket *) NULL)
break;
+ virtual_indexes=GetVirtualIndexesFromNexus(cache_info,virtual_nexus[0]);
(void) CopyMagickMemory(q,p,(size_t) length*sizeof(*p));
q+=length;
- if (indexes != (IndexPacket *) NULL)
+ if ((indexes != (IndexPacket *) NULL) &&
+ (virtual_indexes != (const IndexPacket *) NULL))
{
- nexus_indexes=GetVirtualIndexesFromNexus(cache_info,virtual_nexus[0]);
- if (nexus_indexes != (const IndexPacket *) NULL)
- {
- (void) CopyMagickMemory(indexes,nexus_indexes,(size_t) length*
- sizeof(*nexus_indexes));
- indexes+=length;
- }
+ (void) CopyMagickMemory(indexes,virtual_indexes,(size_t) length*
+ sizeof(*virtual_indexes));
+ indexes+=length;
}
}
}
diff --git a/magick/identify.c b/magick/identify.c
index 1004a14..deda225 100644
--- a/magick/identify.c
+++ b/magick/identify.c
@@ -182,7 +182,7 @@
" Information Measure of Correlation 2:\n" \
" %.*g, %.*g, %.*g, %.*g, %.*g\n" \
" Maximum Correlation Coefficient:\n" \
- " %.*g, %.*g, %.*g, %.*g, %.*g\n"
+ " %.*g, %.*g, %.*g, %.*g, %.*g\n"
int
status;
@@ -217,6 +217,20 @@
int
status;
+ if (channel == AlphaChannel)
+ {
+ status=fprintf(file,StatisticsFormat,name,ClampToQuantum(scale*
+ (QuantumRange-channel_statistics[channel].minima)),
+ (QuantumRange-channel_statistics[channel].minima)/(double) QuantumRange,
+ ClampToQuantum(scale*(QuantumRange-channel_statistics[channel].maxima)),
+ (QuantumRange-channel_statistics[channel].maxima)/(double) QuantumRange, scale*(QuantumRange-channel_statistics[channel].mean),
+ (QuantumRange-channel_statistics[channel].mean)/(double) QuantumRange,
+ scale*channel_statistics[channel].standard_deviation,
+ channel_statistics[channel].standard_deviation/(double) QuantumRange,
+ channel_statistics[channel].kurtosis,
+ channel_statistics[channel].skewness);
+ return(status);
+ }
status=fprintf(file,StatisticsFormat,name,ClampToQuantum(scale*
channel_statistics[channel].minima),channel_statistics[channel].minima/
(double) QuantumRange,ClampToQuantum(scale*
@@ -658,7 +672,7 @@
if (pixel.matte != MagickFalse)
{
(void) ConcatenateMagickString(tuple,",",MaxTextExtent);
- ConcatenateColorComponent(&pixel,OpacityChannel,X11Compliance,
+ ConcatenateColorComponent(&pixel,AlphaChannel,X11Compliance,
tuple);
}
(void) ConcatenateMagickString(tuple,")",MaxTextExtent);