67 #define MaxTreeDepth 8 68 #define NodesInAList 1536 208 #define EvaluateImageTag " Compute image colors... " 243 assert(image != (
const Image *) NULL);
256 for (y=0; y < (ssize_t) image->
rows; y++)
259 if (p == (
const Quantum *) NULL)
261 for (x=0; x < (ssize_t) image->
columns; x++)
266 node_info=cube_info->
root;
283 node_info=node_info->
child[id];
300 if (i >= (ssize_t) node_info->
extent)
313 node_info->
list[i]=pixel;
378 for (i=0; i < (ssize_t) number_children; i++)
477 for (i=0; i < (ssize_t) number_children; i++)
517 (void) memset(cube_info,0,
sizeof(*cube_info));
578 *number_colors=cube_info->
colors;
626 if (nodes == (
Nodes *) NULL)
635 (void) memset(node_info,0,
sizeof(*node_info));
636 node_info->
level=level;
715 for (y=0; y < (ssize_t) image->
rows; y++)
718 if (p == (
const Quantum *) NULL)
720 for (x=0; x < (ssize_t) image->
columns; x++)
725 node_info=cube_info->
root;
742 node_info=node_info->
child[id];
749 target=node_info->
list[i];
762 sizeof(*node_info->
list));
765 (
size_t) (i+1),
sizeof(*node_info->
list));
783 if (cube_info->
colors > max_colors)
788 if (x < (ssize_t) image->
columns)
799 assert(image != (
Image *) NULL);
835 #define MaximumUniqueColors 1024 837 assert(image != (
Image *) NULL);
869 assert(image != (
Image *) NULL);
927 const double black,
const double white,
const double gamma,
950 status&=
LevelImage(image,min,max,gamma,exception);
970 status&=
LevelImage(image,min,max,gamma,exception);
1004 #if defined(__cplusplus) || defined(c_plusplus) 1016 if (color_2->
red != color_1->
red)
1017 return((
int) ((ssize_t) color_1->
red-(ssize_t) color_2->
red));
1019 return((
int) ((ssize_t) color_1->
green-(ssize_t) color_2->
green));
1020 if (color_2->
blue != color_1->
blue)
1021 return((
int) ((ssize_t) color_1->
blue-(ssize_t) color_2->
blue));
1022 return((
int) ((ssize_t) color_2->
count-(ssize_t) color_1->
count));
1025 #if defined(__cplusplus) || defined(c_plusplus) 1032 #define HistogramImageTag "Histogram/Image" 1059 if (file == (FILE *) NULL)
1065 if (cube_info != (
CubeInfo *) NULL)
1066 number_colors=cube_info->
colors;
1068 return(number_colors);
1072 return(number_colors);
1073 qsort((
void *) histogram,(
size_t) number_colors,
sizeof(*histogram),
1078 for (i=0; i < (ssize_t) number_colors; i++)
1116 (void) fflush(file);
1120 return(number_colors);
1151 #define UniqueColorsImageTag "UniqueColors/Image" 1166 for (i=0; i < (ssize_t) number_children; i++)
1169 node_info->
child[i],exception);
1226 if (cube_info == (
CubeInfo *) NULL)
1227 return((
Image *) NULL);
1229 if (unique_image == (
Image *) NULL)
1230 return(unique_image);
1234 return((
Image *) NULL);
1241 return(unique_image);
MagickDoubleType MagickRealType
MagickExport CacheView * DestroyCacheView(CacheView *cache_view)
MagickExport MagickBooleanType QueryColorname(const Image *magick_unused(image), const PixelInfo *color, const ComplianceType compliance, char *name, ExceptionInfo *exception)
MagickProgressMonitor progress_monitor
MagickExport size_t ConcatenateMagickString(char *magick_restrict destination, const char *magick_restrict source, const size_t length)
static Quantum GetPixelAlpha(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport MagickBooleanType IsHistogramImage(const Image *image, ExceptionInfo *exception)
static Quantum GetPixelRed(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
static CubeInfo * GetCubeInfo(void)
static MagickBooleanType IsPixelInfoColorMatch(const PixelInfo *magick_restrict p, const PixelInfo *magick_restrict q)
#define UniqueColorsImageTag
static MagickBooleanType CheckImageColors(const Image *image, ExceptionInfo *exception, size_t max_colors)
static PixelTrait GetPixelChannelTraits(const Image *magick_restrict image, const PixelChannel channel)
static MagickRealType AbsolutePixelValue(const MagickRealType x)
MagickExport size_t CopyMagickString(char *magick_restrict destination, const char *magick_restrict source, const size_t length)
MagickExport const Quantum * GetCacheViewVirtualPixels(const CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport void * ResizeQuantumMemory(void *memory, const size_t count, const size_t quantum)
MagickExport void GetPixelInfo(const Image *image, PixelInfo *pixel)
static Quantum ClampToQuantum(const MagickRealType quantum)
#define MagickCoreSignature
struct _CubeInfo CubeInfo
MagickExport ssize_t FormatLocaleFile(FILE *file, const char *magick_restrict format,...)
unsigned int MagickStatusType
MagickOffsetType progress
MagickExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
MagickExport void GetColorTuple(const PixelInfo *pixel, const MagickBooleanType hex, char *tuple)
static size_t ColorToNodeId(const PixelInfo *pixel, size_t index)
static CubeInfo * ClassifyImageColors(const Image *image, ExceptionInfo *exception)
static NodeInfo * GetNodeInfo(CubeInfo *, const size_t)
static Quantum GetPixelGreen(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
static void GetPixelInfoPixel(const Image *magick_restrict image, const Quantum *magick_restrict pixel, PixelInfo *magick_restrict pixel_info)
MagickExport MagickBooleanType IdentifyPaletteImage(const Image *image, ExceptionInfo *exception)
static Quantum GetPixelBlack(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport ChannelType SetImageChannelMask(Image *image, const ChannelType channel_mask)
struct _NodeInfo * child[16]
MagickExport Quantum * QueueCacheViewAuthenticPixels(CacheView *cache_view, const ssize_t x, const ssize_t y, const size_t columns, const size_t rows, ExceptionInfo *exception)
MagickExport MagickBooleanType ThrowMagickException(ExceptionInfo *exception, const char *module, const char *function, const size_t line, const ExceptionType severity, const char *tag, const char *format,...)
MagickExport MagickBooleanType LogMagickEvent(const LogEventType type, const char *module, const char *function, const size_t line, const char *format,...)
MagickBooleanType(* MagickProgressMonitor)(const char *, const MagickOffsetType, const MagickSizeType, void *)
MagickExport MagickBooleanType GetImageRange(const Image *image, double *minima, double *maxima, ExceptionInfo *exception)
static void SetPixelBlue(const Image *magick_restrict image, const Quantum blue, Quantum *magick_restrict pixel)
MagickExport MagickBooleanType SetImageStorageClass(Image *image, const ClassType storage_class, ExceptionInfo *exception)
MagickExport void ConcatenateColorComponent(const PixelInfo *pixel, const PixelChannel channel, const ComplianceType compliance, char *tuple)
MagickSizeType number_unique
static size_t GetPixelChannels(const Image *magick_restrict image)
MagickExport MagickBooleanType IsPaletteImage(const Image *image)
char filename[MagickPathExtent]
#define GetMagickModule()
NodeInfo nodes[NodesInAList]
MagickExport size_t GetNumberColors(const Image *image, FILE *file, ExceptionInfo *exception)
static void DefineImageHistogram(const Image *image, NodeInfo *node_info, PixelInfo **histogram)
static PixelChannel GetPixelChannelChannel(const Image *magick_restrict image, const ssize_t offset)
MagickExport CacheView * AcquireVirtualCacheView(const Image *image, ExceptionInfo *exception)
#define HistogramImageTag
static CubeInfo * DestroyCubeInfo(const Image *image, CubeInfo *cube_info)
MagickExport MagickBooleanType MinMaxStretchImage(Image *image, const double black, const double white, const double gamma, ExceptionInfo *exception)
MagickExport MagickBooleanType LevelImage(Image *image, const double black_point, const double white_point, const double gamma, ExceptionInfo *exception)
MagickExport void * AcquireMagickMemory(const size_t size)
MagickExport Image * UniqueImageColors(const Image *image, ExceptionInfo *exception)
static void SetPixelAlpha(const Image *magick_restrict image, const Quantum alpha, Quantum *magick_restrict pixel)
static int HistogramCompare(const void *x, const void *y)
#define MaximumUniqueColors
MagickExport void * RelinquishMagickMemory(void *memory)
MagickExport PixelInfo * GetImageHistogram(const Image *image, size_t *number_colors, ExceptionInfo *exception)
static void SetPixelRed(const Image *magick_restrict image, const Quantum red, Quantum *magick_restrict pixel)
struct _NodeInfo NodeInfo
static void UniqueColorsToImage(Image *unique_image, CacheView *unique_view, CubeInfo *cube_info, const NodeInfo *node_info, ExceptionInfo *exception)
MagickExport MagickBooleanType SyncCacheViewAuthenticPixels(CacheView *magick_restrict cache_view, ExceptionInfo *exception)
MagickExport CacheView * AcquireAuthenticCacheView(const Image *image, ExceptionInfo *exception)
ColorspaceType colorspace
static void DestroyColorCube(const Image *, NodeInfo *)
static void SetPixelBlack(const Image *magick_restrict image, const Quantum black, Quantum *magick_restrict pixel)
static Quantum GetPixelBlue(const Image *magick_restrict image, const Quantum *magick_restrict pixel)
MagickExport Image * DestroyImage(Image *image)
MagickExport Image * CloneImage(const Image *image, const size_t columns, const size_t rows, const MagickBooleanType detach, ExceptionInfo *exception)
ColorspaceType colorspace
MagickExport MagickBooleanType SetImageProgress(const Image *image, const char *tag, const MagickOffsetType offset, const MagickSizeType extent)
static void SetPixelGreen(const Image *magick_restrict image, const Quantum green, Quantum *magick_restrict pixel)