image.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**
  2. *** :: Image ::
  3. ***
  4. *** Functions to use in CPU side image processing.
  5. ***
  6. **/
  7. #ifndef image_h
  8. #define image_h
  9. #include "cengine.h"
  10. typedef struct {
  11. int width;
  12. int height;
  13. unsigned char* data;
  14. int repeat_type;
  15. int sample_type;
  16. } image;
  17. enum {
  18. IMAGE_REPEAT_TILE = 0,
  19. IMAGE_REPEAT_CLAMP = 1,
  20. IMAGE_REPEAT_MIRROR = 2,
  21. IMAGE_REPEAT_ERROR = 3,
  22. IMAGE_REPEAT_BLACK = 4
  23. };
  24. enum {
  25. IMAGE_SAMPLE_LINEAR = 0,
  26. IMAGE_SAMPLE_NEAREST = 1
  27. };
  28. image* image_new(int width, int height, unsigned char* data);
  29. image* image_empty(int width, int height);
  30. image* image_blank(int width, int height);
  31. image* image_copy(image* src);
  32. void image_delete(image* i);
  33. vec4 image_get(image* i, int u, int v);
  34. void image_set(image* i, int u, int v, vec4 c);
  35. void image_map(image* i, vec4(*f)(vec4));
  36. image* image_red_channel(image* src);
  37. image* image_green_channel(image* src);
  38. image* image_blue_channel(image* src);
  39. image* image_alpha_channel(image* src);
  40. void image_bgr_to_rgb(image* i);
  41. void image_rotate_90_clockwise(image* i);
  42. void image_rotate_90_counterclockwise(image* i);
  43. void image_rotate_180(image* i);
  44. void image_rotate_inplace(image* i, float amount);
  45. void image_flip_horizontal(image* i);
  46. void image_flip_vertical(image* i);
  47. void image_fill(image* i, vec4 color);
  48. void image_fill_black(image* i);
  49. void image_fill_white(image* i);
  50. void image_apply_gamma(image* i, float amount);
  51. void image_to_gamma(image* i);
  52. void image_from_gamma(image* i);
  53. void image_rgb_to_hsv(image* i);
  54. void image_hsv_to_rgb(image* i);
  55. void image_hsv_scalar(image* i);
  56. vec4 image_min(image* i);
  57. vec4 image_max(image* i);
  58. vec4 image_mean(image* i);
  59. vec4 image_var(image* i);
  60. vec4 image_std(image* i);
  61. void image_auto_contrast(image* i);
  62. void image_set_to_mask(image* i);
  63. void image_set_brightness(image* i, float brightness);
  64. vec4 image_alpha_mean(image* i);
  65. image* image_get_subimage(image* src, int left, int top, int width, int height);
  66. void image_set_subimage(image* i, int left, int top, image* src);
  67. void image_paste_subimage(image* i, int left, int top, image* src);
  68. vec4 image_sample(image* i, vec2 uv);
  69. void image_paint(image* i, vec2 uv, vec4 color);
  70. void image_scale(image* i, vec2 scale);
  71. void image_mask_not(image* i);
  72. void image_mask_binary(image* i0, image* i1, bool(*f)(bool,bool));
  73. void image_mask_or(image* i0, image* i1);
  74. void image_mask_and(image* i0, image* i1);
  75. void image_mask_xor(image* i0, image* i1);
  76. void image_mask_nor(image* i0, image* i1);
  77. void image_mask_nand(image* i0, image* i1);
  78. void image_mask_xnor(image* i0, image* i1);
  79. image* image_mask_alpha(image* i);
  80. image* image_mask_nearest(image* i);
  81. image* image_mask_nearest(image* i);
  82. image* image_mask_flood_fill(image* src, int u, int v, float tolerance);
  83. image* image_mask_difference(image* src, vec4 color, float tolerance);
  84. long image_mask_count(image* i);
  85. void image_mask_median(image* i, int* u, int* v);
  86. void image_mask_random(image* i, int* u, int* v);
  87. image* image_read_from_file(char* filename);
  88. image* image_tga_load_file(char* filename);
  89. image* image_bmp_load_file(char* filename);
  90. void image_write_to_file(image* i, char* filename);
  91. void image_tga_save_file(image* i, char* filename);
  92. void image_bmp_save_file(image* i, char* filename);
  93. #endif