Lines Matching defs:cube_info

433 %      MagickBooleanType AssignImageColors(Image *image,CubeInfo *cube_info)
439 % o cube_info: A pointer to the Cube structure.
444 const CubeInfo *cube_info,const Quantum *pixel,DoublePixelInfo *alpha_pixel)
449 if ((cube_info->associate_alpha == MagickFalse) ||
465 static inline void AssociateAlphaPixelInfo(const CubeInfo *cube_info,
471 if ((cube_info->associate_alpha == MagickFalse) ||
487 static inline size_t ColorToNodeId(const CubeInfo *cube_info,
496 if (cube_info->associate_alpha != MagickFalse)
501 static MagickBooleanType AssignImageColors(Image *image,CubeInfo *cube_info,
512 if ((cube_info->quantize_info->colorspace != UndefinedColorspace) &&
513 (cube_info->quantize_info->colorspace != CMYKColorspace))
514 (void) TransformImageColorspace(image,cube_info->quantize_info->colorspace,
519 if (AcquireImageColormap(image,cube_info->colors,exception) == MagickFalse)
523 cube_info->transparent_pixels=0;
524 cube_info->transparent_index=(-1);
525 (void) DefineImageColormap(image,cube_info,cube_info->root);
529 if (cube_info->quantize_info->dither_method != NoDitherMethod)
530 (void) DitherImage(image,cube_info,exception);
568 cube=(*cube_info);
650 if (cube_info->quantize_info->measure_error != MagickFalse)
652 if ((cube_info->quantize_info->number_colors == 2) &&
653 (cube_info->quantize_info->colorspace == GRAYColorspace))
677 if ((cube_info->quantize_info->colorspace != UndefinedColorspace) &&
678 (cube_info->quantize_info->colorspace != CMYKColorspace))
734 % MagickBooleanType ClassifyImageColors(CubeInfo *cube_info,
739 % o cube_info: A pointer to the Cube structure.
745 static inline void SetAssociatedAlpha(const Image *image,CubeInfo *cube_info)
752 if ((cube_info->quantize_info->number_colors == 2) &&
753 (cube_info->quantize_info->colorspace == GRAYColorspace))
755 cube_info->associate_alpha=associate_alpha;
758 static MagickBooleanType ClassifyImageColors(CubeInfo *cube_info,
791 Classify the first cube_info->maximum_colors colors to a tree depth of 8.
793 SetAssociatedAlpha(image,cube_info);
794 if ((cube_info->quantize_info->colorspace != UndefinedColorspace) &&
795 (cube_info->quantize_info->colorspace != CMYKColorspace))
797 cube_info->quantize_info->colorspace,exception);
818 if (cube_info->nodes > MaxNodes)
823 PruneLevel(cube_info,cube_info->root);
824 cube_info->depth--;
840 AssociateAlphaPixel(image,cube_info,p,&pixel);
844 node_info=cube_info->root;
851 id=ColorToNodeId(cube_info,&pixel,index);
861 node_info->child[id]=GetNodeInfo(cube_info,id,level,node_info);
870 cube_info->colors++;
879 if (cube_info->associate_alpha != MagickFalse)
886 cube_info->root->quantize_error+=node_info->quantize_error;
896 if (cube_info->associate_alpha != MagickFalse)
904 if (cube_info->colors > cube_info->maximum_colors)
906 PruneToCubeDepth(cube_info,cube_info->root);
925 if (cube_info->nodes > MaxNodes)
930 PruneLevel(cube_info,cube_info->root);
931 cube_info->depth--;
947 AssociateAlphaPixel(image,cube_info,p,&pixel);
951 node_info=cube_info->root;
952 for (level=1; level <= cube_info->depth; level++)
958 id=ColorToNodeId(cube_info,&pixel,index);
968 node_info->child[id]=GetNodeInfo(cube_info,id,level,node_info);
976 if (level == cube_info->depth)
977 cube_info->colors++;
986 if (cube_info->associate_alpha != MagickFalse)
993 cube_info->root->quantize_error+=node_info->quantize_error;
1003 if (cube_info->associate_alpha != MagickFalse)
1017 if ((cube_info->quantize_info->colorspace != UndefinedColorspace) &&
1018 (cube_info->quantize_info->colorspace != CMYKColorspace))
1086 % void ClosestColor(const Image *image,CubeInfo *cube_info,
1093 % o cube_info: A pointer to the Cube structure.
1099 static void ClosestColor(const Image *image,CubeInfo *cube_info,
1111 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
1114 ClosestColor(image,cube_info,node_info->child[i]);
1135 q=(&cube_info->target);
1138 if (cube_info->associate_alpha != MagickFalse)
1145 if (distance <= cube_info->distance)
1149 if (distance <= cube_info->distance)
1153 if (distance <= cube_info->distance)
1155 if (cube_info->associate_alpha != MagickFalse)
1160 if (distance <= cube_info->distance)
1162 cube_info->distance=distance;
1163 cube_info->color_number=node_info->color_number;
1235 % size_t DefineImageColormap(Image *image,CubeInfo *cube_info,
1242 % o cube_info: A pointer to the Cube structure.
1248 static size_t DefineImageColormap(Image *image,CubeInfo *cube_info,
1260 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
1263 (void) DefineImageColormap(image,cube_info,node_info->child[i]);
1278 if (cube_info->associate_alpha == MagickFalse)
1317 if (node_info->number_unique > cube_info->transparent_pixels)
1319 cube_info->transparent_pixels=node_info->number_unique;
1320 cube_info->transparent_index=(ssize_t) image->colors;
1345 % DestroyCubeInfo(CubeInfo *cube_info)
1349 % o cube_info: the address of a structure of type CubeInfo.
1352 static void DestroyCubeInfo(CubeInfo *cube_info)
1362 nodes=cube_info->node_queue->next;
1363 cube_info->node_queue->nodes=(NodeInfo *) RelinquishMagickMemory(
1364 cube_info->node_queue->nodes);
1365 cube_info->node_queue=(Nodes *) RelinquishMagickMemory(
1366 cube_info->node_queue);
1367 cube_info->node_queue=nodes;
1368 } while (cube_info->node_queue != (Nodes *) NULL);
1369 if (cube_info->memory_info != (MemoryInfo *) NULL)
1370 cube_info->memory_info=RelinquishVirtualMemory(cube_info->memory_info);
1371 cube_info->quantize_info=DestroyQuantizeInfo(cube_info->quantize_info);
1372 cube_info=(CubeInfo *) RelinquishMagickMemory(cube_info);
1428 % MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info,
1435 % o cube_info: A pointer to the Cube structure.
1481 static inline ssize_t CacheOffset(CubeInfo *cube_info,
1495 if (cube_info->associate_alpha != MagickFalse)
1500 static MagickBooleanType FloydSteinbergDither(Image *image,CubeInfo *cube_info,
1557 cube=(*cube_info);
1691 static void Riemersma(Image *image,CacheView *image_view,CubeInfo *cube_info,
1699 (void) RiemersmaDither(image,image_view,cube_info,EastGravity,
1701 (void) RiemersmaDither(image,image_view,cube_info,SouthGravity,
1703 (void) RiemersmaDither(image,image_view,cube_info,WestGravity,
1709 (void) RiemersmaDither(image,image_view,cube_info,WestGravity,
1711 (void) RiemersmaDither(image,image_view,cube_info,NorthGravity,
1713 (void) RiemersmaDither(image,image_view,cube_info,EastGravity,
1719 (void) RiemersmaDither(image,image_view,cube_info,SouthGravity,
1721 (void) RiemersmaDither(image,image_view,cube_info,EastGravity,
1723 (void) RiemersmaDither(image,image_view,cube_info,NorthGravity,
1729 (void) RiemersmaDither(image,image_view,cube_info,NorthGravity,
1731 (void) RiemersmaDither(image,image_view,cube_info,WestGravity,
1733 (void) RiemersmaDither(image,image_view,cube_info,SouthGravity,
1745 Riemersma(image,image_view,cube_info,level-1,NorthGravity,
1747 (void) RiemersmaDither(image,image_view,cube_info,EastGravity,
1749 Riemersma(image,image_view,cube_info,level-1,WestGravity,
1751 (void) RiemersmaDither(image,image_view,cube_info,SouthGravity,
1753 Riemersma(image,image_view,cube_info,level-1,WestGravity,
1755 (void) RiemersmaDither(image,image_view,cube_info,WestGravity,
1757 Riemersma(image,image_view,cube_info,level-1,SouthGravity,
1763 Riemersma(image,image_view,cube_info,level-1,SouthGravity,
1765 (void) RiemersmaDither(image,image_view,cube_info,WestGravity,
1767 Riemersma(image,image_view,cube_info,level-1,EastGravity,
1769 (void) RiemersmaDither(image,image_view,cube_info,NorthGravity,
1771 Riemersma(image,image_view,cube_info,level-1,EastGravity,
1773 (void) RiemersmaDither(image,image_view,cube_info,EastGravity,
1775 Riemersma(image,image_view,cube_info,level-1,NorthGravity,
1781 Riemersma(image,image_view,cube_info,level-1,WestGravity,
1783 (void) RiemersmaDither(image,image_view,cube_info,SouthGravity,
1785 Riemersma(image,image_view,cube_info,level-1,NorthGravity,
1787 (void) RiemersmaDither(image,image_view,cube_info,EastGravity,
1789 Riemersma(image,image_view,cube_info,level-1,NorthGravity,
1791 (void) RiemersmaDither(image,image_view,cube_info,NorthGravity,
1793 Riemersma(image,image_view,cube_info,level-1,EastGravity,
1799 Riemersma(image,image_view,cube_info,level-1,EastGravity,
1801 (void) RiemersmaDither(image,image_view,cube_info,NorthGravity,
1803 Riemersma(image,image_view,cube_info,level-1,SouthGravity,
1805 (void) RiemersmaDither(image,image_view,cube_info,WestGravity,
1807 Riemersma(image,image_view,cube_info,level-1,SouthGravity,
1809 (void) RiemersmaDither(image,image_view,cube_info,SouthGravity,
1811 Riemersma(image,image_view,cube_info,level-1,WestGravity,
1821 CubeInfo *cube_info,const unsigned int direction,ExceptionInfo *exception)
1838 p=cube_info;
1854 AssociateAlphaPixel(image,cube_info,q,&pixel);
1860 if (cube_info->associate_alpha != MagickFalse)
1866 if (cube_info->associate_alpha != MagickFalse)
1868 i=CacheOffset(cube_info,&pixel);
1883 id=ColorToNodeId(cube_info,&pixel,index);
1903 if (cube_info->quantize_info->measure_error == MagickFalse)
1908 if (cube_info->associate_alpha != MagickFalse)
1918 AssociateAlphaPixelInfo(cube_info,image->colormap+index,&color);
1922 if (cube_info->associate_alpha != MagickFalse)
1939 static MagickBooleanType DitherImage(Image *image,CubeInfo *cube_info,
1954 if (cube_info->quantize_info->dither_method != RiemersmaDitherMethod)
1955 return(FloydSteinbergDither(image,cube_info,exception));
1959 (void) ResetMagickMemory(cube_info->error,0,ErrorQueueLength*
1960 sizeof(*cube_info->error));
1961 cube_info->x=0;
1962 cube_info->y=0;
1968 cube_info->offset=0;
1969 cube_info->span=(MagickSizeType) image->columns*image->rows;
1972 Riemersma(image,image_view,cube_info,depth-1,NorthGravity,exception);
1973 status=RiemersmaDither(image,image_view,cube_info,ForgetGravity,exception);
2017 *cube_info;
2030 Initialize tree to describe color cube_info.
2032 cube_info=(CubeInfo *) AcquireMagickMemory(sizeof(*cube_info));
2033 if (cube_info == (CubeInfo *) NULL)
2035 (void) ResetMagickMemory(cube_info,0,sizeof(*cube_info));
2036 cube_info->depth=depth;
2037 if (cube_info->depth > MaxTreeDepth)
2038 cube_info->depth=MaxTreeDepth;
2039 if (cube_info->depth < 2)
2040 cube_info->depth=2;
2041 cube_info->maximum_colors=maximum_colors;
2045 cube_info->root=GetNodeInfo(cube_info,0,0,(NodeInfo *) NULL);
2046 if (cube_info->root == (NodeInfo *) NULL)
2048 cube_info->root->parent=cube_info->root;
2049 cube_info->quantize_info=CloneQuantizeInfo(quantize_info);
2050 if (cube_info->quantize_info->dither_method == NoDitherMethod)
2051 return(cube_info);
2056 cube_info->memory_info=AcquireVirtualMemory(length,sizeof(*cube_info->cache));
2057 if (cube_info->memory_info == (MemoryInfo *) NULL)
2059 cube_info->cache=(ssize_t *) GetVirtualMemoryBlob(cube_info->memory_info);
2063 (void) ResetMagickMemory(cube_info->cache,(-1),sizeof(*cube_info->cache)*
2071 cube_info->weights[ErrorQueueLength-i-1]=PerceptibleReciprocal(weight);
2079 weight+=cube_info->weights[i];
2083 cube_info->weights[i]/=weight;
2084 sum+=cube_info->weights[i];
2086 cube_info->weights[0]+=1.0-sum;
2087 return(cube_info);
2107 % NodeInfo *GetNodeInfo(CubeInfo *cube_info,const size_t id,
2119 static NodeInfo *GetNodeInfo(CubeInfo *cube_info,const size_t id,
2125 if (cube_info->free_nodes == 0)
2140 nodes->next=cube_info->node_queue;
2141 cube_info->node_queue=nodes;
2142 cube_info->next_node=nodes->nodes;
2143 cube_info->free_nodes=NodesInAList;
2145 cube_info->nodes++;
2146 cube_info->free_nodes--;
2147 node_info=cube_info->next_node++;
2501 % PruneChild(CubeInfo *cube_info,const NodeInfo *node_info)
2505 % o cube_info: A pointer to the Cube structure.
2510 static void PruneChild(CubeInfo *cube_info,const NodeInfo *node_info)
2524 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
2527 PruneChild(cube_info,node_info->child[i]);
2538 cube_info->nodes--;
2558 % PruneLevel(CubeInfo *cube_info,const NodeInfo *node_info)
2562 % o cube_info: A pointer to the Cube structure.
2567 static void PruneLevel(CubeInfo *cube_info,const NodeInfo *node_info)
2578 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
2581 PruneLevel(cube_info,node_info->child[i]);
2582 if (node_info->level == cube_info->depth)
2583 PruneChild(cube_info,node_info);
2599 % cube_info->depth while merging their color statistics into their parent
2604 % PruneToCubeDepth(CubeInfo *cube_info,const NodeInfo *node_info)
2608 % o cube_info: A pointer to the Cube structure.
2613 static void PruneToCubeDepth(CubeInfo *cube_info,const NodeInfo *node_info)
2624 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
2627 PruneToCubeDepth(cube_info,node_info->child[i]);
2628 if (node_info->level > cube_info->depth)
2629 PruneChild(cube_info,node_info);
2667 *cube_info;
2725 cube_info=GetCubeInfo(quantize_info,depth,maximum_colors);
2726 if (cube_info == (CubeInfo *) NULL)
2729 status=ClassifyImageColors(cube_info,image,exception);
2736 if (cube_info->colors > cube_info->maximum_colors)
2737 ReduceImageColors(image,cube_info);
2739 cube_info->quantize_info->dither_method=NoDitherMethod;
2740 status=AssignImageColors(image,cube_info,exception);
2742 DestroyCubeInfo(cube_info);
2781 *cube_info;
2841 cube_info=GetCubeInfo(quantize_info,depth,maximum_colors);
2842 if (cube_info == (CubeInfo *) NULL)
2854 status=ClassifyImageColors(cube_info,image,exception);
2869 ReduceImageColors(images,cube_info);
2875 status=AssignImageColors(image,cube_info,exception);
2887 DestroyCubeInfo(cube_info);
2910 % size_t QuantizeErrorFlatten(const CubeInfo *cube_info,
2916 % o cube_info: A pointer to the Cube structure.
2925 static size_t QuantizeErrorFlatten(const CubeInfo *cube_info,
2935 if (offset >= (ssize_t) cube_info->nodes)
2939 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
2942 n+=QuantizeErrorFlatten(cube_info,node_info->child[i],offset+n,
2964 % Reduce(CubeInfo *cube_info,const NodeInfo *node_info)
2968 % o cube_info: A pointer to the Cube structure.
2973 static void Reduce(CubeInfo *cube_info,const NodeInfo *node_info)
2984 number_children=cube_info->associate_alpha == MagickFalse ? 8UL : 16UL;
2987 Reduce(cube_info,node_info->child[i]);
2988 if (node_info->quantize_error <= cube_info->pruning_threshold)
2989 PruneChild(cube_info,node_info);
2996 cube_info->colors++;
2997 if (node_info->quantize_error < cube_info->next_threshold)
2998 cube_info->next_threshold=node_info->quantize_error;
3048 % ReduceImageColors(const Image *image,CubeInfo *cube_info)
3054 % o cube_info: A pointer to the Cube structure.
3073 static void ReduceImageColors(const Image *image,CubeInfo *cube_info)
3086 cube_info->next_threshold=0.0;
3087 if (cube_info->colors > cube_info->maximum_colors)
3095 quantize_error=(double *) AcquireQuantumMemory(cube_info->nodes,
3099 (void) QuantizeErrorFlatten(cube_info,cube_info->root,0,
3101 qsort(quantize_error,cube_info->nodes,sizeof(double),
3103 if (cube_info->nodes > (110*(cube_info->maximum_colors+1)/100))
3104 cube_info->next_threshold=quantize_error[cube_info->nodes-110*
3105 (cube_info->maximum_colors+1)/100];
3109 for (span=cube_info->colors; cube_info->colors > cube_info->maximum_colors; )
3111 cube_info->pruning_threshold=cube_info->next_threshold;
3112 cube_info->next_threshold=cube_info->root->quantize_error-1;
3113 cube_info->colors=0;
3114 Reduce(cube_info,cube_info->root);
3115 offset=(MagickOffsetType) span-cube_info->colors;
3117 cube_info->maximum_colors+1);
3158 *cube_info;
3174 cube_info=GetCubeInfo(quantize_info,MaxTreeDepth,
3176 if (cube_info == (CubeInfo *) NULL)
3179 status=ClassifyImageColors(cube_info,remap_image,exception);
3185 cube_info->quantize_info->number_colors=cube_info->colors;
3186 status=AssignImageColors(image,cube_info,exception);
3188 DestroyCubeInfo(cube_info);
3227 *cube_info;
3253 cube_info=GetCubeInfo(quantize_info,MaxTreeDepth,
3255 if (cube_info == (CubeInfo *) NULL)
3258 status=ClassifyImageColors(cube_info,remap_image,exception);
3264 cube_info->quantize_info->number_colors=cube_info->colors;
3268 status=AssignImageColors(image,cube_info,exception);
3273 DestroyCubeInfo(cube_info);