/common.h

https://github.com/XadillaX/byakuren · C Header · 151 lines · 57 code · 16 blank · 78 comment · 4 complexity · 79549c58aede931331c97421cc7db09f MD5 · raw file

  1. /**
  2. *
  3. *        }:                  _、,r 、,,v   \
  4. *        /    \       、,v'" ~     ゚~"''x、 \
  5. *         /             、r''"   ,, 、,v、x。,,     ~" 、,
  6. *             ...::::入,,"  ,,、イ: : : : : : : : :"'ミ、,
  7. *           ...::::/  y": : : : : : : : : :イ : : : : : : :"v    '、
  8. *       }   ....:::::イ  /.: :/: : :/: :/ 八: : : : : : : : :\    ,"
  9. *        j     / ,:': : : /: :/: /  /: ハ: : }:\: : : : :´、, ォ
  10. *  、'"~`"ゞ       ,.: : : : : : : :イ≦" ̄''  、;_:j : : : : : : : : トミ
  11. * r"     オ彡    {: : : {: : : Vfうか㍉   ル">ミ: : : : :!: !
  12. * 、      ,"     人: :八.: :从 ヒツ     ん㍊: : : : : リ j
  13. * ´、,,  、ノ'′ -‐:彡/: : : : :\ ヽ""       だン 从: : : イレ
  14. *   "¨ . . : : : : : : : : : : : {: : : : : :)       '  `¨ ノ: :ノ: : :人ヽ
  15. *    /: /: : : / : : : :八: : : : :リ   ` ー ー=彡:イ: : : : : : : :
  16. *   /: : : : : : : : : : : : イ: : :): : : : :| \       イ : : }: : : :}: :ハ: }
  17. *  ,': : : {: : : :厂¨¨<: 人: : : : : : : !   ー  爪: :i : : :} : : :ル: : :ソ
  18. *  {: : :八: >     /: : : : : : : : リ      {: : : i: : :r- < ¨¨ヽ: : .
  19. * ..人: : /    /: : : : : i: : : : :八   / 〉ミ: i: r┴   ヽ  V: :\
  20. *   ソ    /: : : : : : : i: : /        ," \:.r--      、 V: : : \
  21. * /: :{    ,':ィ: /: : : /ノ/         ,,    λ 、      ∨i: : : : : : .
  22. *   /:{    ル: : 彡" ≠===…-===彳   v´ ゝ冬。      : : : : : :
  23. *  . :∧   /: : :/"   "s。         亥  ;"   ヽミ     Y: : : : : : :}
  24. * .ノ: : 人 /: /   {    ドx。    。ζ   、    : :ハ     Ⅳ: : : : :人
  25. * : : : : : :У: '    、    ';  ≫≪゚゜ ;    ;"     }:^j    i "、:ルイ: : \
  26. * : : : : : (: :({     ;"   ジ゚゜ .:: ヾ。,"   ",    : ;"" 、,   i  "; :八: :}
  27. * : :!: : :ハ:.入    v   ;"  .::::..  `;    "、  人{、   "、,,   )
  28. * V{: : : : :   ゝ     j   、  ノ  \ ";     χ   〉"、,,    ",、
  29. *   、: : : Y¨¨≫> _)   ,ж"     ,,ゞ''::.. -‐  ".、 /   "、,,   "
  30. *   ヽ: :∧〃     ",   π_゚≫=≦゚_ "、     V      "、,,  "、
  31. *    V       ''、  ド¨       ¨=≧、,
  32. *       }         y"            "、,_  {       }"   ,"
  33. *        {         ヽ      ;i           '`~え
  34. *                \、             ,'` ~  ",       }   ;"
  35. *       V        \         ,,'` ~      ",
  36. *                ∧"''  、_,、"~          ")彡'    ;"
  37. *         j            j==¨天⌒ミo。    、,,v '`"~ \   r'"
  38. *                ,,、'" 、。彳 ヾ    》'` "~        、 ヽ、,v"
  39. *       /      ,,r 、v~     "i{   》添冬       ,, '` ~ "y
  40. *         r 、v~         "y 侔愛翔
  41. *        ,,^"         、,"^ \ ゞ趁彡'    ,''`   f"~
  42. *    〈  r"           )i      ヽ        ,,'`    ,''`i
  43. *      j   ..:::'′ ,、   '"|
  44. *     Y    ",, ,,^     i     、 .) 、r~   ,、r~    j
  45. *          彡ィ"      `-ヽ_ゝ しY,`~  v "
  46. *      "、   、j              ;i^ `~
  47. *          "  ~|                i|          /
  48. *
  49. * Byakuren - A theme color extracting library implemented by C.
  50. *
  51. * Copyright (c) 2017 XadillaX <i@2333.moe>
  52. *
  53. * MIT LIcense <https://github.com/XadillaX/byakuren/blob/master/LICENSE>
  54. */
  55. #ifndef __BKR_COMMON_H__
  56. #define __BKR_COMMON_H__
  57. #include <stdio.h>
  58. #include <stdlib.h>
  59. #include <stdint.h>
  60. #include "third-party/xmempool/xmempool.h"
  61. #ifdef __cplusplus
  62. extern "C" {
  63. #endif
  64. #ifndef NULL
  65. #define NULL (0)
  66. #endif
  67. #define SAFE_DESTROY_POOL(pool) if(pool) { xmem_destroy_pool(pool); pool = NULL; }
  68. #define SAFE_FREE(pointer) if(pointer) { free(pointer); pointer = NULL; }
  69. #define MAX_INT (2147483647)
  70. #define BKR_RGB_TO_INT32(r, g, b) (((r) << 16) + ((g) << 8) + (b))
  71. #define BKR_IS_GRAY(a, offset) (abs((a)->red - (a)->green) <= offset && \
  72. abs((a)->red - (a)->blue) <= offset && \
  73. abs((a)->green - (a)->blue) <= offset)
  74. /**
  75. * RGB 颜色结构体
  76. */
  77. typedef struct bkr_rgb {
  78. uint8_t red;
  79. uint8_t green;
  80. uint8_t blue;
  81. } bkr_rgb;
  82. /**
  83. * 主题色结果(颜色、色值、像素数)结构体
  84. */
  85. typedef struct bkr_color_stats {
  86. bkr_rgb color;
  87. uint32_t value;
  88. uint32_t count;
  89. } bkr_color_stats;
  90. /**
  91. * 八叉树节点结构体
  92. */
  93. typedef struct bkr_octree_node {
  94. uint32_t red_components;
  95. uint32_t green_components;
  96. uint32_t blue_components;
  97. uint8_t is_leaf;
  98. uint32_t pixel_count;
  99. struct bkr_octree_node* children[8];
  100. } bkr_octree_node;
  101. /**
  102. * 八叉树可删减链表节点结构体
  103. */
  104. typedef struct bkr_octree_reducible_list_node {
  105. struct bkr_octree_node* node;
  106. struct bkr_octree_reducible_list_node* next;
  107. } bkr_octree_reducible_list_node;
  108. /**
  109. * 标准色板结构体
  110. */
  111. typedef struct bkr_palette_array {
  112. uint32_t count;
  113. bkr_rgb* colors;
  114. } bkr_palette_array;
  115. /**
  116. * 最小差值法参数结构体
  117. */
  118. typedef struct bkr_mindiff_parameter {
  119. bkr_palette_array* palette;
  120. int16_t gray_offset;
  121. } bkr_mindiff_parameter;
  122. // * * * *
  123. // ** 注意没有对多线程作支持 **
  124. // 主要是因为内存池没支持
  125. // ** ---------------------- **
  126. // * *
  127. extern xmem_pool_handle bkr_rgb_pool;
  128. extern int bkr_init();
  129. extern void bkr_destroy();
  130. // 该函数为颜色结果排序的函数
  131. extern int _stats_cmp(const void* a, const void* b);
  132. #ifdef __cplusplus
  133. }
  134. #endif
  135. #endif