home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 June / Chip_2002-06_cd1.bin / ctenari / Krutak / univiewi_pdk.exe / cimage.h next >
C/C++ Source or Header  |  2002-04-05  |  18KB  |  330 lines

  1. /*
  2.     UniView 1.8+ Image for plugin SDK
  3.  
  4.     This file is allows you to create UniView plugins supporting Image
  5.     operations. If you want to use it,     you must agree following text
  6.     and you can start programming :-)
  7.  
  8.     Copyright (C)1998-2002 by Andrej Krutak
  9.  
  10.     Permission to use, copy, modify, and distribute this
  11.     software and its documentation for any purpose, without
  12.     fee, and without written agreement is hereby granted,
  13.     provided that the above copyright notice appear in all
  14.     copies and that both copyright notice and this permission
  15.     notice appear in supporting documentation.  This software
  16.     is provided "as is" without express or implied warranty.
  17.  
  18.     Changes:
  19.     -------------------
  20.     1.8
  21.     -------------------
  22.         + Updated "UVImage_quantize" and "UVImage_quantize_xbpp" to mirror changes in program
  23.         + Added '...' to all functions' definitions to avoid problems with different versions of UniView - no functions' parameters will be changed, they may be just inserted to end of functions' parameter list
  24.         + Added new functions (also added to program ;-)
  25.         * Removed C compatibility issues
  26.     
  27.     -------------------
  28.     1.73
  29.     -------------------
  30.         * Initial version
  31. */
  32.  
  33. #define CIMAGEVER 1800
  34. /*
  35. For setting compatibility... Number here is maked as following MMmmm, where
  36. MM is major version (for UniView 1.8 is it 1, here written as 1 :) and mmm is
  37. minor version (UniView 1.8 - 800, UniView 1.886 would be 886 and 1.83: 830).
  38. Just put it together and... UniView 1.8 is 1800
  39.  
  40. PLEASE NOTE: If you define here e.g. 1.8 and use functions allowed just for this
  41. and newer versions, plugin wouldn't be usable on previous versions (this means
  42. e.g. 1.73).
  43. */
  44.  
  45. #include <windows.h>
  46.  
  47. #define IMAGE_SIZE_RESAMPLE            0
  48. #define IMAGE_SIZE_CROP                1
  49. //Resize filters
  50. #define IMAGE_SIZE_FILTER_DEFAULT    0
  51.  
  52. //Status of CImage
  53. #define IMAGE_OK    0
  54. #define IMAGE_BAD    1
  55.  
  56. //CImage load errors
  57. #define OPEN_SUCESS            0
  58. #define UNSUP_FORMAT        1
  59. #define CORRUP_IMAGE        2
  60. #define OUT_OF_MEMORY        3
  61. #define UNKNOWN_ERROR        4
  62. #define BAD_HEADER            5
  63. #define FILE_ERROR            6
  64. #define BAD_COLORTABLE        7
  65. #define BAD_VERSION            8
  66. #define INTERNAL_ERROR        9
  67. #define WARNING_CORRUPTED    -1
  68.  
  69. typedef void * CImage;
  70.  
  71. #ifdef __cplusplus
  72. extern "C" {
  73. #endif
  74.  
  75. __declspec (dllexport) CImage* UVImage_create(int xs, int ys, int bpp, ...);
  76. __declspec (dllexport) int UVImage_recreate(CImage *img, int xs, int ys, int bpp, ...);
  77. __declspec (dllexport) int UVImage_getXSize(CImage *img, ...);
  78. __declspec (dllexport) int UVImage_getYSize(CImage *img, ...);
  79. __declspec (dllexport) int UVImage_getBPP(CImage *img, ...);
  80. __declspec (dllexport) int UVImage_destroy(CImage *img, ...);
  81. __declspec (dllexport) int UVImage_setRGB(CImage *img, int x, int y, BYTE r, BYTE g, BYTE b, ...);
  82. __declspec (dllexport) int UVImage_setRGB2(CImage *img, int x, int y, COLORREF rgb, ...);
  83. __declspec (dllexport) int UVImage_setR(CImage *img, int x, int y, BYTE r, ...);
  84. __declspec (dllexport) int UVImage_setG(CImage *img, int x, int y, BYTE g, ...);
  85. __declspec (dllexport) int UVImage_setB(CImage *img, int x, int y, BYTE r, ...);
  86. __declspec (dllexport) int UVImage_setGR(CImage *img, int x, int y, BYTE gr, ...);
  87. __declspec (dllexport) BYTE UVImage_getR(CImage *img, int x, int y, ...);
  88. __declspec (dllexport) BYTE UVImage_getG(CImage *img, int x, int y, ...);
  89. __declspec (dllexport) BYTE UVImage_getB(CImage *img, int x, int y, ...);
  90. __declspec (dllexport) BYTE UVImage_getL(CImage *img, int x, int y, ...); //Returns L item (lightness) from HLS color model...
  91. __declspec (dllexport) int UVImage_getCol(CImage *img, COLORREF *col, int x, ...); //Functions copying whole column or row (target buffer must be large enought to hold data!)
  92. __declspec (dllexport) int UVImage_getRow(CImage *img, COLORREF *row, int y, ...);
  93. __declspec (dllexport) int UVImage_setPenColor2(CImage *img, COLORREF rgb, ...); //Sets pencolor
  94. __declspec (dllexport) int UVImage_setPenColor(CImage *img, BYTE r, BYTE g, BYTE b, ...);
  95. __declspec (dllexport) int UVImage_setLineRGB(CImage *img, int line, BYTE *row, int pixels, ...); //Sets line's RGB-triples bytes
  96. __declspec (dllexport) int UVImage_setLineRGB2(CImage *img, int line, COLORREF *row, int pixels, ...);
  97.  
  98. //-------------Copy functions-------------
  99. //This functions simply copies CImage to target CImage, doesn't perform any special operations even if target CImage is smaller than source (target will be croped)
  100. __declspec (dllexport) int UVImage_copyTo(CImage *img, CImage* timg, int xp, int yp, ...);
  101. //This functions copies CImage to target CImage, if the target CImage is too small, size of target CImage will be increased
  102. __declspec (dllexport) int UVImage_copyTo_enlargetarget(CImage *img, CImage* timg, ...);
  103. //This functions copies CImage to target CImage and changes it's size to target's CImage size (will perform resample size)
  104. __declspec (dllexport) int UVImage_scaleTo(CImage *img, CImage* timg, ...);
  105.  
  106. //This functions copies CImage to target and changes it's size so it will be copied as 'thumbnail' - will have the same x:y ratio and it will be in maximal target picture size (CImage will be centered in area of target CImage which has imaginary bx*by border)
  107. __declspec (dllexport) int UVImage_thumbnailTo(CImage *img, CImage* timg, int bx, int by, int border, int useresample, ...);
  108.  
  109. //-------------CImage effects-------------
  110. //This function resizes CImage to selected size
  111. __declspec (dllexport) int UVImage_resize(CImage *img, int newx, int newy, int rtype, int rfilter, int blur, ...);
  112.  
  113. //This function changes color depth of CImage, onebppparam is currently used as parameter for hilbert filter
  114. __declspec (dllexport) int UVImage_quantize(CImage *img, int newcolors, int filter, int onebppparam, int xbppparam1, int xbppparam2, int cttype, ...);
  115.  
  116. //Creates color table for CImage
  117. __declspec (dllexport) int UVImage_colortable_make(CImage *img, ...);
  118.  
  119. //Returns count of colortable items
  120. __declspec (dllexport) int UVImage_colortable_itemscount(CImage *img, ...);
  121.  
  122. //Frees color table (it's automatically called by destructor, but you should use it explicitly to free memory)
  123. __declspec (dllexport) int UVImage_colortable_free(CImage *img, ...);
  124.  
  125. //These functions are testing, whether colortable is truecolor, greyscale, B/W or colormapped
  126. __declspec (dllexport) int UVImage_colortable_isgreyscale(CImage *img, ...);
  127. __declspec (dllexport) int UVImage_colortable_isblackwhite(CImage *img, ...);
  128. __declspec (dllexport) int UVImage_colortable_istruecolor(CImage *img, ...);
  129. __declspec (dllexport) int UVImage_colortable_iscolormapped(CImage *img, ...);
  130.  
  131. //Returns colortable items (colors array must be large enought to hold data), you can specify maxbpp to limit maximal count of colors returned
  132. __declspec (dllexport) int UVImage_colortable_get(CImage *img, COLORREF colors[], int maxbpp, ...);
  133.  
  134. //Returns index of specified color in colortable or -1 if this color doesn't exist in
  135. __declspec (dllexport) int UVImage_colortable_lookupcolor(CImage *img, BYTE r, BYTE g, BYTE b, long *count, ...);
  136. __declspec (dllexport) int UVImage_colortable_lookupcolor2(CImage *img, COLORREF c, long *count, ...);
  137.  
  138. //DANGEROUS: Sets colormap for CImage from COLORREF table with lenght 'len'. Be sure it's the right colortable, otherwise, CImage class will do strange things!
  139. __declspec (dllexport) int UVImage_colortable_set(CImage *img, COLORREF table[], int len, ...);
  140.  
  141. //DANGEROUS: Sets index of specified color and validates other indexes...
  142. __declspec (dllexport) int UVImage_colortable_setcolorindex(CImage *img, BYTE r, BYTE g, BYTE b, int index, ...);
  143. __declspec (dllexport) int UVImage_colortable_setcolorindex2(CImage *img, COLORREF c, int index, ...);
  144.  
  145. //Specific filters for color quantizing. Used by quantize method
  146. __declspec (dllexport) int UVImage_quantize_1bpp_epox1(CImage *img, ...);
  147. __declspec (dllexport) int UVImage_quantize_1bpp_epox2(CImage *img, ...);
  148. __declspec (dllexport) int UVImage_quantize_1bpp_epox3(CImage *img, ...);
  149. __declspec (dllexport) int UVImage_quantize_1bpp_epox4(CImage *img, ...);
  150. __declspec (dllexport) int UVImage_quantize_1bpp_epox5(CImage *img, ...);
  151. __declspec (dllexport) int UVImage_quantize_1bpp_other(CImage *img, int type, int hilbertp, ...);
  152. __declspec (dllexport) int UVImage_quantize_xbpp(CImage *img, int newcolors, int filter, int type1, int type2, int cttype, ...);
  153.  
  154. //This function erases whole CImage with color specified with 'color' parameter
  155. __declspec (dllexport) int UVImage_clear(CImage *img, COLORREF color, ...);
  156.  
  157. //Fills selection of CImage with current pen color
  158. __declspec (dllexport) int UVImage_fill(CImage *img, COLORREF color, ...);
  159. __declspec (dllexport) int UVImage_fill2(CImage *img, ...);
  160.  
  161. //Draws rect with specified color (uses selection)
  162. __declspec (dllexport) int UVImage_drawRect(CImage *img, COLORREF color, ...);
  163.  
  164. //-------------File manipulating functions-------------
  165. //This function loads specified file if possible (if filters for specified file type are available) - automatically recognizes input format (by RAW, YUV and ICO it uses settings of UniView - use specific functions to control loading parameters (open_raw, open_yuv, open_ico))
  166. __declspec (dllexport) int UVImage_load(CImage *img, char *path, ...);
  167.  
  168. //This function saves specified file if possible (if filters for specified file type are available) - automatically recognizes target format and uses settings of UniView to set files' properties (use specific functions to modify)
  169. __declspec (dllexport) int UVImage_save(CImage *img, char *path, char *extuse, ...);
  170.  
  171. //-------------Service functions-------------
  172. //Functions to give CImage's internal data (please don't do any sh*t with these pointers)
  173. __declspec (dllexport) BITMAPINFO* UVImage_getbmi(CImage *img, ...);
  174.  
  175. //Selects whole CImage
  176. __declspec (dllexport) int UVImage_clearsel(CImage *img, ...);
  177.  
  178. //Sets description of CImage, string MUST be maximal 256 characters long
  179. __declspec (dllexport) int UVImage_setDescription(CImage *img, char *str, ...);
  180.  
  181. //Gets description of CImage
  182. __declspec (dllexport) int UVImage_getDescription(CImage *img, char *str, ...);
  183.  
  184. //Returns status of CImage - IMAGE_OK if all ok, some other value otherwise
  185. __declspec (dllexport) int UVImage_getStatus(CImage *img, ...);
  186.  
  187. //Sets curent selection of CImage...
  188. __declspec (dllexport) int UVImage_setselection(CImage *img, long x, long y, long xs, long ys, ...);
  189.  
  190. //Retrieves, if CImage's selection is selecting whole CImage
  191. __declspec (dllexport) int UVImage_isSelectedAll(CImage *img, ...);
  192.  
  193. //-------------Available CImage effects-------------
  194. //Makes 3D button in CImage, uses selection
  195. __declspec (dllexport) int UVImage_effect_3dbutton(CImage *img, int butx, int buty, int graybutton, ...);
  196.  
  197. //Dims current selection using strength parameter as intensity
  198. __declspec (dllexport) int UVImage_effect_dim(CImage *img, int strength, ...);
  199.  
  200. //Creates mirror of CImage
  201. __declspec (dllexport) int UVImage_effect_flip(CImage *img, ...);
  202.  
  203. //Creates top-bottom switched CImage
  204. __declspec (dllexport) int UVImage_effect_flop(CImage *img, ...);
  205.  
  206. //Rotates CImage left
  207. __declspec (dllexport) int UVImage_effect_rotateleft(CImage *img, ...);
  208.  
  209. //Rotates CImage right
  210. __declspec (dllexport) int UVImage_effect_rotateright(CImage *img, ...);
  211.  
  212. //Isolates selected color (prm. which) and, optionally shows this channel in color mode
  213. __declspec (dllexport) int UVImage_effect_isolatecolor_rgb(CImage *img, int which, int togray, ...);
  214.  
  215. //Isolates selected component of HSV model of CImage
  216. __declspec (dllexport) int UVImage_effect_isolatecolor_hsv(CImage *img, int which, ...);
  217.  
  218. //Converts CImage from RGB to other CImage channel order (each parameter specifies new position of component, zero-based - eg. if newri=2, newgi=1, newbi=0, CImage will be BGR)
  219. __declspec (dllexport) int UVImage_effect_rgbto(CImage *img, int newri, int newgi, int newbi, ...);
  220.  
  221. //Creates negative of CImage
  222. __declspec (dllexport) int UVImage_effect_negative(CImage *img, ...);
  223.  
  224. //Replaces greyscale colors with color
  225. __declspec (dllexport) int UVImage_effect_replacegrey(CImage *img, int tolerance, COLORREF pencolor, ...);
  226.  
  227. //Creates gray CImage using algorithm C=(R+G+B)/3 for each pixel
  228. __declspec (dllexport) int UVImage_effect_makegray_sum(CImage *img, ...);
  229.  
  230. //Creates gray CImage using lightness value of HSV color model (it's faster then HSV isolating, but it's less sophisticated...)
  231. __declspec (dllexport) int UVImage_effect_makegray_light(CImage *img, ...);
  232.  
  233. //Changes color attributes of CImage (first three pars. are changing RGB, next three HSV and last gamma values of pixel)
  234. __declspec (dllexport) int UVImage_effect_enhance_colors(CImage *img, int retr, int retg, int retb, int reth, int rets, int retv, double gamma, ...);
  235.  
  236. //Makes pixelized CImage with boxx*boxy size boxes
  237. __declspec (dllexport) int UVImage_effect_pixelize(CImage *img, int boxx, int boxy, ...);
  238.  
  239. //Exploses CImage using matrixx*matrixy size matrix and seed parameter as strength
  240. __declspec (dllexport) int UVImage_effect_explosion(CImage *img, int matrixx, int matrixy, int seed, ...);
  241.  
  242. //Finds edges in CImage
  243. __declspec (dllexport) int UVImage_effect_findedges(CImage *img, ...);
  244.  
  245. //Makes details more visible by strenght factor
  246. __declspec (dllexport) int UVImage_effect_enhance(CImage *img, int strenght, ...);
  247.  
  248. //Makes CImage like it were slopped by some liquid
  249. __declspec (dllexport) int UVImage_effect_slopedcolors(CImage *img, ...);
  250.  
  251. //Makes 'oilpaint work' from CImage
  252. __declspec (dllexport) int UVImage_effect_oilpaint(CImage *img, int bublesize, ...);
  253.  
  254. //Embosses CImage
  255. __declspec (dllexport) int UVImage_effect_emboss(CImage *img, int azimuth, int elevation, int width, ...);
  256.  
  257. //Noises CImage
  258. __declspec (dllexport) int UVImage_effect_noise(CImage *img, int intensity, int colornoise, int additive, int strenght, ...);
  259.  
  260. //Interlaces CImage
  261. __declspec (dllexport) int UVImage_effect_interlace(CImage *img, int stepx, int stepy, int offsetx, int offsety, int type, COLORREF pencolor, ...);
  262.  
  263. //Shakes CImage
  264. __declspec (dllexport) int UVImage_effect_shake(CImage *img, COLORREF color, ...);
  265.  
  266. //Custom matrix-defined effect
  267. __declspec (dllexport) int UVImage_effect_custom(CImage *img, int vals[49], int div, int bias, ...);
  268.  
  269. //Makes gradient in CImage
  270. __declspec (dllexport) int UVImage_effect_gradient(CImage *img, int type, COLORREF color1, COLORREF color2, ...);
  271.  
  272. //Blurs CImage like it was moved fast
  273. __declspec (dllexport) int UVImage_effect_motionblur(CImage *img, int direction, int step, int stepcount, ...);
  274.  
  275. //Blurs CImage
  276. __declspec (dllexport) int UVImage_effect_blur(CImage *img, int strenght, ...);
  277.  
  278. //Applies decolorify effect to CImage
  279. __declspec (dllexport) int UVImage_effect_decolorify(CImage *img, int maxc, ...);
  280.  
  281. //Applies median filter to CImage
  282. __declspec (dllexport) int UVImage_effect_medianfilter(CImage *img, int radius, ...);
  283.  
  284. //Changes contrast of CImage
  285. __declspec (dllexport) int UVImage_effect_contrast(CImage *img, int strenght, ...);
  286.  
  287. //Applies threshold effect to CImage
  288. __declspec (dllexport) int UVImage_effect_threshold(CImage *img, int value, COLORREF c1, COLORREF c2, ...);
  289.  
  290. #if (CIMAGEVER>=1800)
  291. //Blends img2 with img
  292. __declspec (dllexport) int UVImage_effect_alphablendwith(CImage *img, CImage *img2, int alpha, int x, int y, int x1, int y1, int xs, int ys, int transparent, COLORREF transcolor, ...);
  293.  
  294. //Rotates image
  295. __declspec (dllexport) int UVImage_rotate(CImage *img, float angle, int antialias);
  296.  
  297. //Crops image
  298. __declspec (dllexport) int UVImage_crop(CImage *img, int xs, int ys, COLORREF bkcolor, int align);
  299.  
  300. //Replaces one color to another
  301. __declspec (dllexport) int UVImage_effect_replaceColor(CImage *img, COLORREF incolor, COLORREF outcolor, int intolerance, int transformcolors);
  302. #endif
  303.  
  304. #ifdef __cplusplus
  305.  
  306. __declspec (dllexport) int UVImage_quantize(CImage *_img, int newcolors, int filter, int onebppparam=1, int xbppparam1=1, int xbppparam2=2, int cttype=0, ...);
  307. __declspec (dllexport) int UVImage_thumbnailTo2(CImage *_img, CImage& timg, int bx=0, int by=0, int border=1, int useresample=0, ...);
  308. __declspec (dllexport) int UVImage_thumbnailTo(CImage *_img, CImage* timg, int bx=0, int by=0, int border=1, int useresample=0, ...);
  309. __declspec (dllexport) int UVImage_resize(CImage *_img, int newx, int newy, int rtype=0, int rfilter=0, int blur=1, ...);
  310. __declspec (dllexport) int UVImage_copyTo(CImage *_img, CImage* timg, int xp=0, int yp=0, ...);
  311. __declspec (dllexport) int UVImage_colortable_get(CImage *_img, COLORREF colors[], int maxbpp=8, ...);
  312. __declspec (dllexport) int UVImage_colortable_lookupcolor(CImage *_img, BYTE r, BYTE g, BYTE b, long *count=NULL, ...);
  313. __declspec (dllexport) int UVImage_colortable_lookupcolor2(CImage *_img, COLORREF c, long *count=NULL, ...);
  314. __declspec (dllexport) int UVImage_quantize_1bpp_other(CImage *_img, int type, int hilbertp=1, ...);
  315. __declspec (dllexport) int UVImage_quantize_xbpp(CImage *_img, int newcolors, int filter, int type1=1, int type2=2, int cttype=0, ...);
  316. __declspec (dllexport) int UVImage_effect_addimage(CImage *_img, CImage &tmp, int xs=0, int ys=0, int alpha=100, ...);
  317. __declspec (dllexport) int UVImage_effect_gradient(CImage *_img, int type, COLORREF color1=RGB(0, 0, 0), COLORREF color2=RGB(255, 255, 255), ...);
  318. __declspec (dllexport) int UVImage_effect_isolatecolor_rgb(CImage *_img, int which, int togray=0, ...);
  319. __declspec (dllexport) int UVImage_save(CImage *_img, char *path, char *extuse=NULL, ...);
  320. __declspec (dllexport) int UVImage_effect_addimage(CImage *img, CImage &tmp, int xs, int ys, int alpha, ...);
  321. __declspec (dllexport) int UVImage_scaleTo2(CImage *img, CImage& timg, ...);
  322. __declspec (dllexport) int UVImage_copyRectTo(CImage *img, int x, int y, int xs, int ys, CImage &timg, int tx, int ty, ...);
  323. __declspec (dllexport) int UVImage_getPenColor(CImage *img, BYTE &r, BYTE &g, BYTE &b, ...);
  324. __declspec (dllexport) int UVImage_getPenColor2(CImage *img, COLORREF &rgb, ...);
  325. __declspec (dllexport) int UVImage_getRGB2(CImage *img, int x, int y, COLORREF &c, ...);
  326. __declspec (dllexport) int UVImage_getRGB(CImage *img, int x, int y, BYTE &r, BYTE &g, BYTE &b, ...);
  327. __declspec (dllexport) CImage *UVImage_getSelection(CImage *img, RECT &rect, ...);
  328.  
  329. }
  330. #endif