ruby-iup 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. data/Rakefile +97 -0
  2. data/doc/README +10 -0
  3. data/doc/build_install.txt +77 -0
  4. data/examples/README +16 -0
  5. data/examples/ctrl/cbox.rb +221 -0
  6. data/examples/ctrl/checkboard.rb +33 -0
  7. data/examples/ctrl/degrade.rb +73 -0
  8. data/examples/ctrl/example1.rb +53 -0
  9. data/examples/ctrl/example2.rb +39 -0
  10. data/examples/ctrl/iupcolorbar.rb +95 -0
  11. data/examples/ctrl/iupcolorbrowser.rb +45 -0
  12. data/examples/ctrl/iupdial.rb +117 -0
  13. data/examples/ctrl/iupgauge.rb +242 -0
  14. data/examples/ctrl/iupgetcolor.rb +8 -0
  15. data/examples/ctrl/iupgetparam.rb +62 -0
  16. data/examples/ctrl/iupglcanvas.rb +172 -0
  17. data/examples/ctrl/iupmask.rb +15 -0
  18. data/examples/ctrl/iupmatrix.rb +39 -0
  19. data/examples/ctrl/iupplot2.rb +603 -0
  20. data/examples/ctrl/iuptabs.rb +22 -0
  21. data/examples/ctrl/iuptree.rb +190 -0
  22. data/examples/ctrl/iupval.rb +71 -0
  23. data/examples/ctrl/numbering.rb +46 -0
  24. data/examples/ctrl/sample.rb +166 -0
  25. data/examples/dlg/iupalarm.rb +14 -0
  26. data/examples/dlg/iupfiledlg.rb +19 -0
  27. data/examples/dlg/iupgetfile.rb +19 -0
  28. data/examples/dlg/iuplistdialog.rb +26 -0
  29. data/examples/dlg/iupmessage.rb +5 -0
  30. data/examples/dlg/iupscanf.rb +17 -0
  31. data/examples/elem/iupbutton.rb +197 -0
  32. data/examples/elem/iupcanvas.rb +27 -0
  33. data/examples/elem/iupcanvas2.rb +113 -0
  34. data/examples/elem/iupcanvas3.rb +62 -0
  35. data/examples/elem/iupdialog.rb +71 -0
  36. data/examples/elem/iupdialog2.rb +25 -0
  37. data/examples/elem/iupfill.rb +51 -0
  38. data/examples/elem/iupframe.rb +25 -0
  39. data/examples/elem/iuphbox.rb +68 -0
  40. data/examples/elem/iupimage.rb +113 -0
  41. data/examples/elem/iupitem.rb +60 -0
  42. data/examples/elem/iuplabel.rb +57 -0
  43. data/examples/elem/iuplist.rb +41 -0
  44. data/examples/elem/iuplist2.rb +125 -0
  45. data/examples/elem/iupmenu.rb +32 -0
  46. data/examples/elem/iupmultiline.rb +24 -0
  47. data/examples/elem/iupmultiline2.rb +156 -0
  48. data/examples/elem/iupradio.rb +32 -0
  49. data/examples/elem/iupseparator.rb +81 -0
  50. data/examples/elem/iupsubmenu.rb +85 -0
  51. data/examples/elem/iuptext.rb +61 -0
  52. data/examples/elem/iuptimer.rb +36 -0
  53. data/examples/elem/iuptoggle.rb +110 -0
  54. data/examples/elem/iupvbox.rb +87 -0
  55. data/examples/elem/iupzbox.rb +60 -0
  56. data/examples/elem/mdisample.rb +376 -0
  57. data/examples/elem/progressbar.rb +294 -0
  58. data/examples/elem/scrollbar.rb +66 -0
  59. data/examples/elem/tray.rb +90 -0
  60. data/examples/func/iupgetattribute.rb +32 -0
  61. data/examples/func/iupidle.rb +48 -0
  62. data/ext/extconf.rb +27 -0
  63. data/ext/iup-linux/include/cd.h +494 -0
  64. data/ext/iup-linux/include/cd_canvas.hpp +358 -0
  65. data/ext/iup-linux/include/cd_old.h +158 -0
  66. data/ext/iup-linux/include/cd_private.h +362 -0
  67. data/ext/iup-linux/include/cdcgm.h +34 -0
  68. data/ext/iup-linux/include/cdclipbd.h +22 -0
  69. data/ext/iup-linux/include/cddbuf.h +23 -0
  70. data/ext/iup-linux/include/cddebug.h +24 -0
  71. data/ext/iup-linux/include/cddgn.h +23 -0
  72. data/ext/iup-linux/include/cddxf.h +22 -0
  73. data/ext/iup-linux/include/cdemf.h +22 -0
  74. data/ext/iup-linux/include/cdgdiplus.h +29 -0
  75. data/ext/iup-linux/include/cdimage.h +23 -0
  76. data/ext/iup-linux/include/cdirgb.h +30 -0
  77. data/ext/iup-linux/include/cdiup.h +22 -0
  78. data/ext/iup-linux/include/cdlua.h +39 -0
  79. data/ext/iup-linux/include/cdlua3_private.h +120 -0
  80. data/ext/iup-linux/include/cdlua5_private.h +141 -0
  81. data/ext/iup-linux/include/cdluaim.h +24 -0
  82. data/ext/iup-linux/include/cdluaiup.h +27 -0
  83. data/ext/iup-linux/include/cdluapdf.h +27 -0
  84. data/ext/iup-linux/include/cdmf.h +24 -0
  85. data/ext/iup-linux/include/cdmf_private.h +32 -0
  86. data/ext/iup-linux/include/cdnative.h +26 -0
  87. data/ext/iup-linux/include/cdpdf.h +38 -0
  88. data/ext/iup-linux/include/cdpicture.h +22 -0
  89. data/ext/iup-linux/include/cdprint.h +23 -0
  90. data/ext/iup-linux/include/cdps.h +37 -0
  91. data/ext/iup-linux/include/cdwmf.h +22 -0
  92. data/ext/iup-linux/include/im.h +282 -0
  93. data/ext/iup-linux/include/im_attrib.h +116 -0
  94. data/ext/iup-linux/include/im_attrib_flat.h +39 -0
  95. data/ext/iup-linux/include/im_binfile.h +214 -0
  96. data/ext/iup-linux/include/im_capture.h +365 -0
  97. data/ext/iup-linux/include/im_color.h +465 -0
  98. data/ext/iup-linux/include/im_colorhsi.h +61 -0
  99. data/ext/iup-linux/include/im_complex.h +160 -0
  100. data/ext/iup-linux/include/im_convert.h +127 -0
  101. data/ext/iup-linux/include/im_counter.h +69 -0
  102. data/ext/iup-linux/include/im_dib.h +195 -0
  103. data/ext/iup-linux/include/im_file.h +111 -0
  104. data/ext/iup-linux/include/im_format.h +79 -0
  105. data/ext/iup-linux/include/im_format_all.h +576 -0
  106. data/ext/iup-linux/include/im_format_avi.h +87 -0
  107. data/ext/iup-linux/include/im_format_ecw.h +93 -0
  108. data/ext/iup-linux/include/im_format_jp2.h +78 -0
  109. data/ext/iup-linux/include/im_format_raw.h +64 -0
  110. data/ext/iup-linux/include/im_format_wmv.h +100 -0
  111. data/ext/iup-linux/include/im_image.h +403 -0
  112. data/ext/iup-linux/include/im_kernel.h +315 -0
  113. data/ext/iup-linux/include/im_lib.h +191 -0
  114. data/ext/iup-linux/include/im_math.h +368 -0
  115. data/ext/iup-linux/include/im_math_op.h +219 -0
  116. data/ext/iup-linux/include/im_palette.h +172 -0
  117. data/ext/iup-linux/include/im_plus.h +73 -0
  118. data/ext/iup-linux/include/im_process.h +35 -0
  119. data/ext/iup-linux/include/im_process_ana.h +221 -0
  120. data/ext/iup-linux/include/im_process_glo.h +170 -0
  121. data/ext/iup-linux/include/im_process_loc.h +577 -0
  122. data/ext/iup-linux/include/im_process_pon.h +712 -0
  123. data/ext/iup-linux/include/im_raw.h +34 -0
  124. data/ext/iup-linux/include/im_util.h +277 -0
  125. data/ext/iup-linux/include/imlua.h +83 -0
  126. data/ext/iup-linux/include/iup.h +255 -0
  127. data/ext/iup-linux/include/iup_pplot.h +40 -0
  128. data/ext/iup-linux/include/iupcb.h +25 -0
  129. data/ext/iup-linux/include/iupcbox.h +23 -0
  130. data/ext/iup-linux/include/iupcbs.h +42 -0
  131. data/ext/iup-linux/include/iupcells.h +130 -0
  132. data/ext/iup-linux/include/iupcolorbar.h +126 -0
  133. data/ext/iup-linux/include/iupcompat.h +62 -0
  134. data/ext/iup-linux/include/iupcontrols.h +40 -0
  135. data/ext/iup-linux/include/iupcpi.h +76 -0
  136. data/ext/iup-linux/include/iupdef.h +520 -0
  137. data/ext/iup-linux/include/iupdial.h +64 -0
  138. data/ext/iup-linux/include/iupgauge.h +57 -0
  139. data/ext/iup-linux/include/iupgc.h +20 -0
  140. data/ext/iup-linux/include/iupgetparam.h +27 -0
  141. data/ext/iup-linux/include/iupgl.h +101 -0
  142. data/ext/iup-linux/include/iupim.h +21 -0
  143. data/ext/iup-linux/include/iupkey.h +290 -0
  144. data/ext/iup-linux/include/iuplua.h +41 -0
  145. data/ext/iup-linux/include/iuplua_pplot.h +26 -0
  146. data/ext/iup-linux/include/iupluacontrols.h +27 -0
  147. data/ext/iup-linux/include/iupluagl.h +26 -0
  148. data/ext/iup-linux/include/iupluaim.h +26 -0
  149. data/ext/iup-linux/include/iupluaole.h +26 -0
  150. data/ext/iup-linux/include/iupmask.h +52 -0
  151. data/ext/iup-linux/include/iupmatrix.h +69 -0
  152. data/ext/iup-linux/include/iupole.h +24 -0
  153. data/ext/iup-linux/include/iupsbox.h +20 -0
  154. data/ext/iup-linux/include/iupspeech.h +23 -0
  155. data/ext/iup-linux/include/iupspin.h +21 -0
  156. data/ext/iup-linux/include/iuptabs.h +79 -0
  157. data/ext/iup-linux/include/iuptree.h +93 -0
  158. data/ext/iup-linux/include/iupval.h +46 -0
  159. data/ext/iup-linux/include/lauxlib.h +174 -0
  160. data/ext/iup-linux/include/lua.h +388 -0
  161. data/ext/iup-linux/include/lua.hpp +9 -0
  162. data/ext/iup-linux/include/luaconf.h +763 -0
  163. data/ext/iup-linux/include/lualib.h +53 -0
  164. data/ext/iup-linux/include/old_im.h +59 -0
  165. data/ext/iup-linux/include/wd.h +78 -0
  166. data/ext/iup-linux/include/wd_old.h +85 -0
  167. data/ext/iup-linux/libcd.so +0 -0
  168. data/ext/iup-linux/libcdcontextplus.so +0 -0
  169. data/ext/iup-linux/libcdluacontextplus51.so +0 -0
  170. data/ext/iup-linux/libcdpdf.so +0 -0
  171. data/ext/iup-linux/libfreetype.so +0 -0
  172. data/ext/iup-linux/libim.so +0 -0
  173. data/ext/iup-linux/libim_fftw.so +0 -0
  174. data/ext/iup-linux/libim_jp2.so +0 -0
  175. data/ext/iup-linux/libim_process.so +0 -0
  176. data/ext/iup-linux/libiup.so +0 -0
  177. data/ext/iup-linux/libiup_pplot.so +0 -0
  178. data/ext/iup-linux/libiupcd.so +0 -0
  179. data/ext/iup-linux/libiupcontrols.so +0 -0
  180. data/ext/iup-linux/libiupgl.so +0 -0
  181. data/ext/iup-linux/libiupim.so +0 -0
  182. data/ext/iup-linux/libiupimglib.so +0 -0
  183. data/ext/iup-linux/libpdflib.so +0 -0
  184. data/ext/iup-win32/cd.dll +0 -0
  185. data/ext/iup-win32/cd.lib +0 -0
  186. data/ext/iup-win32/cdcontextplus.dll +0 -0
  187. data/ext/iup-win32/cdcontextplus.lib +0 -0
  188. data/ext/iup-win32/cdlua51.lib +0 -0
  189. data/ext/iup-win32/cdluacontextplus51.lib +0 -0
  190. data/ext/iup-win32/cdluaim51.lib +0 -0
  191. data/ext/iup-win32/cdluapdf51.lib +0 -0
  192. data/ext/iup-win32/cdpdf.dll +0 -0
  193. data/ext/iup-win32/cdpdf.lib +0 -0
  194. data/ext/iup-win32/freetype6.dll +0 -0
  195. data/ext/iup-win32/freetype6.lib +0 -0
  196. data/ext/iup-win32/im.dll +0 -0
  197. data/ext/iup-win32/im_avi.dll +0 -0
  198. data/ext/iup-win32/im_capture.dll +0 -0
  199. data/ext/iup-win32/im_ecw.dll +0 -0
  200. data/ext/iup-win32/im_fftw.dll +0 -0
  201. data/ext/iup-win32/im_jp2.dll +0 -0
  202. data/ext/iup-win32/im_process.dll +0 -0
  203. data/ext/iup-win32/im_wmv.dll +0 -0
  204. data/ext/iup-win32/include/cd.h +494 -0
  205. data/ext/iup-win32/include/cd_canvas.hpp +358 -0
  206. data/ext/iup-win32/include/cd_old.h +158 -0
  207. data/ext/iup-win32/include/cd_private.h +362 -0
  208. data/ext/iup-win32/include/cdcgm.h +34 -0
  209. data/ext/iup-win32/include/cdclipbd.h +22 -0
  210. data/ext/iup-win32/include/cddbuf.h +23 -0
  211. data/ext/iup-win32/include/cddebug.h +24 -0
  212. data/ext/iup-win32/include/cddgn.h +23 -0
  213. data/ext/iup-win32/include/cddxf.h +22 -0
  214. data/ext/iup-win32/include/cdemf.h +22 -0
  215. data/ext/iup-win32/include/cdgdiplus.h +29 -0
  216. data/ext/iup-win32/include/cdimage.h +23 -0
  217. data/ext/iup-win32/include/cdirgb.h +30 -0
  218. data/ext/iup-win32/include/cdiup.h +22 -0
  219. data/ext/iup-win32/include/cdlua.h +39 -0
  220. data/ext/iup-win32/include/cdlua3_private.h +120 -0
  221. data/ext/iup-win32/include/cdlua5_private.h +141 -0
  222. data/ext/iup-win32/include/cdluaim.h +24 -0
  223. data/ext/iup-win32/include/cdluaiup.h +27 -0
  224. data/ext/iup-win32/include/cdluapdf.h +27 -0
  225. data/ext/iup-win32/include/cdmf.h +24 -0
  226. data/ext/iup-win32/include/cdmf_private.h +32 -0
  227. data/ext/iup-win32/include/cdnative.h +26 -0
  228. data/ext/iup-win32/include/cdpdf.h +38 -0
  229. data/ext/iup-win32/include/cdpicture.h +22 -0
  230. data/ext/iup-win32/include/cdprint.h +23 -0
  231. data/ext/iup-win32/include/cdps.h +37 -0
  232. data/ext/iup-win32/include/cdwmf.h +22 -0
  233. data/ext/iup-win32/include/iup.h +255 -0
  234. data/ext/iup-win32/include/iup_pplot.h +40 -0
  235. data/ext/iup-win32/include/iupcb.h +25 -0
  236. data/ext/iup-win32/include/iupcbox.h +23 -0
  237. data/ext/iup-win32/include/iupcbs.h +42 -0
  238. data/ext/iup-win32/include/iupcells.h +130 -0
  239. data/ext/iup-win32/include/iupcolorbar.h +126 -0
  240. data/ext/iup-win32/include/iupcompat.h +62 -0
  241. data/ext/iup-win32/include/iupcontrols.h +40 -0
  242. data/ext/iup-win32/include/iupcpi.h +76 -0
  243. data/ext/iup-win32/include/iupdef.h +520 -0
  244. data/ext/iup-win32/include/iupdial.h +64 -0
  245. data/ext/iup-win32/include/iupgauge.h +57 -0
  246. data/ext/iup-win32/include/iupgc.h +20 -0
  247. data/ext/iup-win32/include/iupgetparam.h +27 -0
  248. data/ext/iup-win32/include/iupgl.h +101 -0
  249. data/ext/iup-win32/include/iupim.h +21 -0
  250. data/ext/iup-win32/include/iupkey.h +290 -0
  251. data/ext/iup-win32/include/iuplua.h +41 -0
  252. data/ext/iup-win32/include/iuplua_pplot.h +26 -0
  253. data/ext/iup-win32/include/iupluacontrols.h +27 -0
  254. data/ext/iup-win32/include/iupluagl.h +26 -0
  255. data/ext/iup-win32/include/iupluaim.h +26 -0
  256. data/ext/iup-win32/include/iupluaole.h +26 -0
  257. data/ext/iup-win32/include/iupmask.h +52 -0
  258. data/ext/iup-win32/include/iupmatrix.h +69 -0
  259. data/ext/iup-win32/include/iupole.h +24 -0
  260. data/ext/iup-win32/include/iupsbox.h +20 -0
  261. data/ext/iup-win32/include/iupspeech.h +23 -0
  262. data/ext/iup-win32/include/iupspin.h +21 -0
  263. data/ext/iup-win32/include/iuptabs.h +79 -0
  264. data/ext/iup-win32/include/iuptree.h +93 -0
  265. data/ext/iup-win32/include/iupval.h +46 -0
  266. data/ext/iup-win32/include/wd.h +78 -0
  267. data/ext/iup-win32/include/wd_old.h +85 -0
  268. data/ext/iup-win32/iup.dll +0 -0
  269. data/ext/iup-win32/iup.lib +0 -0
  270. data/ext/iup-win32/iup_pplot.dll +0 -0
  271. data/ext/iup-win32/iup_pplot.lib +0 -0
  272. data/ext/iup-win32/iupcd.dll +0 -0
  273. data/ext/iup-win32/iupcd.lib +0 -0
  274. data/ext/iup-win32/iupcontrols.dll +0 -0
  275. data/ext/iup-win32/iupcontrols.lib +0 -0
  276. data/ext/iup-win32/iupgl.dll +0 -0
  277. data/ext/iup-win32/iupgl.lib +0 -0
  278. data/ext/iup-win32/iupim.dll +0 -0
  279. data/ext/iup-win32/iupim.lib +0 -0
  280. data/ext/iup-win32/iupimglib.dll +0 -0
  281. data/ext/iup-win32/iupimglib.lib +0 -0
  282. data/ext/iup-win32/iuplua51.lib +0 -0
  283. data/ext/iup-win32/iuplua_pplot51.lib +0 -0
  284. data/ext/iup-win32/iupluacd51.lib +0 -0
  285. data/ext/iup-win32/iupluacontrols51.lib +0 -0
  286. data/ext/iup-win32/iupluagl51.lib +0 -0
  287. data/ext/iup-win32/iupluaim51.lib +0 -0
  288. data/ext/iup-win32/iupluaimglib51.lib +0 -0
  289. data/ext/iup-win32/iupluaole51.lib +0 -0
  290. data/ext/iup-win32/iupole.dll +0 -0
  291. data/ext/iup-win32/iupole.lib +0 -0
  292. data/ext/iup-win32/iupstub.lib +0 -0
  293. data/ext/iup-win32/pdflib.dll +0 -0
  294. data/ext/iup-win32/pdflib.lib +0 -0
  295. data/ext/iup.c +1261 -0
  296. data/ext/mkrf_conf.rb +72 -0
  297. data/ext/rb_cd.h +1525 -0
  298. data/ext/rb_iup.h +2446 -0
  299. data/ext/rb_iup_pplot.h +129 -0
  300. data/ext/rb_iupcb.h +13 -0
  301. data/ext/rb_iupcbox.h +40 -0
  302. data/ext/rb_iupcells.h +15 -0
  303. data/ext/rb_iupcolorbar.h +17 -0
  304. data/ext/rb_iupcompat.h +237 -0
  305. data/ext/rb_iupcontrols.h +28 -0
  306. data/ext/rb_iupdef.h +3 -0
  307. data/ext/rb_iupdial.h +24 -0
  308. data/ext/rb_iupgauge.h +15 -0
  309. data/ext/rb_iupgc.h +18 -0
  310. data/ext/rb_iupgetparam.h +72 -0
  311. data/ext/rb_iupgl.h +58 -0
  312. data/ext/rb_iupim.h +25 -0
  313. data/ext/rb_iupmask.h +189 -0
  314. data/ext/rb_iupmatrix.h +80 -0
  315. data/ext/rb_iupole.h +24 -0
  316. data/ext/rb_iupsbox.h +23 -0
  317. data/ext/rb_iupspeech.h +25 -0
  318. data/ext/rb_iupspin.h +29 -0
  319. data/ext/rb_iuptabs.h +29 -0
  320. data/ext/rb_iuptree.h +94 -0
  321. data/ext/rb_iupval.h +24 -0
  322. data/lib/README +1 -0
  323. metadata +391 -0
@@ -0,0 +1,368 @@
1
+ /** \file
2
+ * \brief Math Utilities
3
+ *
4
+ * See Copyright Notice in im_lib.h
5
+ */
6
+
7
+ #ifndef __IM_MATH_H
8
+ #define __IM_MATH_H
9
+
10
+ #include <math.h>
11
+ #include "im_util.h"
12
+
13
+ #ifdef IM_DEFMATHFLOAT
14
+ inline float acosf(float _X) {return ((float)acos((double)_X)); }
15
+ inline float asinf(float _X) {return ((float)asin((double)_X)); }
16
+ inline float atanf(float _X) {return ((float)atan((double)_X)); }
17
+ inline float atan2f(float _X, float _Y) {return ((float)atan2((double)_X, (double)_Y)); }
18
+ inline float ceilf(float _X) {return ((float)ceil((double)_X)); }
19
+ inline float cosf(float _X) {return ((float)cos((double)_X)); }
20
+ inline float coshf(float _X) {return ((float)cosh((double)_X)); }
21
+ inline float expf(float _X) {return ((float)exp((double)_X)); }
22
+ inline float fabsf(float _X) {return ((float)fabs((double)_X)); }
23
+ inline float floorf(float _X) {return ((float)floor((double)_X)); }
24
+ inline float fmodf(float _X, float _Y) {return ((float)fmod((double)_X, (double)_Y)); }
25
+ inline float logf(float _X) {return ((float)log((double)_X)); }
26
+ inline float log10f(float _X) {return ((float)log10((double)_X)); }
27
+ inline float powf(float _X, float _Y) {return ((float)pow((double)_X, (double)_Y)); }
28
+ inline float sinf(float _X) {return ((float)sin((double)_X)); }
29
+ inline float sinhf(float _X) {return ((float)sinh((double)_X)); }
30
+ inline float sqrtf(float _X) {return ((float)sqrt((double)_X)); }
31
+ inline float tanf(float _X) {return ((float)tan((double)_X)); }
32
+ inline float tanhf(float _X) {return ((float)tanh((double)_X)); }
33
+ #endif
34
+
35
+ /** \defgroup math Math Utilities
36
+ * \par
37
+ * When converting between continuous and discrete use: \n
38
+ * Continuous = Discrete + 0.5 [Reconstruction/Interpolation] \n
39
+ * Discrete = Round(Continuous - 0.5) [Sampling/Quantization] \n
40
+ * \par
41
+ * Notice that must check 0-max limits when converting from Continuous to Discrete.
42
+ * \par
43
+ * When converting between discrete and discrete use: \n
44
+ * integer src_size, dst_len, src_i, dst_i \n
45
+ * real factor = (real)(dst_size)/(real)(src_size) \n
46
+ * dst_i = Round(factor*(src_i + 0.5) - 0.5)
47
+ * \par
48
+ * See \ref im_math.h
49
+ * \ingroup util */
50
+
51
+
52
+ /** Round a real to the nearest integer.
53
+ * \ingroup math */
54
+ inline int imRound(float x)
55
+ {
56
+ return (int)(x < 0? x-0.5f: x+0.5f);
57
+ }
58
+ inline int imRound(double x)
59
+ {
60
+ return (int)(x < 0? x-0.5: x+0.5);
61
+ }
62
+
63
+ /** Converts between two discrete grids.
64
+ * factor is "dst_size/src_size".
65
+ * \ingroup math */
66
+ inline int imResample(int x, float factor)
67
+ {
68
+ float xr = factor*(x + 0.5f) - 0.5f;
69
+ return (int)(xr < 0? xr-0.5f: xr+0.5f); /* Round */
70
+ }
71
+
72
+ /** Does Zero Order Decimation (Mean).
73
+ * \ingroup math */
74
+ template <class T, class TU>
75
+ inline T imZeroOrderDecimation(int width, int height, T *map, float xl, float yl, float box_width, float box_height, TU Dummy)
76
+ {
77
+ int x0,x1,y0,y1;
78
+ (void)Dummy;
79
+
80
+ x0 = (int)floor(xl - box_width/2.0 - 0.5) + 1;
81
+ y0 = (int)floor(yl - box_height/2.0 - 0.5) + 1;
82
+ x1 = (int)floor(xl + box_width/2.0 - 0.5);
83
+ y1 = (int)floor(yl + box_height/2.0 - 0.5);
84
+
85
+ if (x0 == x1) x1++;
86
+ if (y0 == y1) y1++;
87
+
88
+ x0 = x0<0? 0: x0>width-1? width-1: x0;
89
+ y0 = y0<0? 0: y0>height-1? height-1: y0;
90
+ x1 = x1<0? 0: x1>width-1? width-1: x1;
91
+ y1 = y1<0? 0: y1>height-1? height-1: y1;
92
+
93
+ TU Value;
94
+ int Count = 0;
95
+
96
+ Value = 0;
97
+
98
+ for (int y = y0; y <= y1; y++)
99
+ {
100
+ for (int x = x0; x <= x1; x++)
101
+ {
102
+ Value += map[y*width+x];
103
+ Count++;
104
+ }
105
+ }
106
+
107
+ if (Count == 0)
108
+ {
109
+ Value = 0;
110
+ return (T)Value;
111
+ }
112
+
113
+ return (T)(Value/(float)Count);
114
+ }
115
+
116
+ /** Does Bilinear Decimation.
117
+ * \ingroup math */
118
+ template <class T, class TU>
119
+ inline T imBilinearDecimation(int width, int height, T *map, float xl, float yl, float box_width, float box_height, TU Dummy)
120
+ {
121
+ int x0,x1,y0,y1;
122
+ (void)Dummy;
123
+
124
+ x0 = (int)floor(xl - box_width/2.0 - 0.5) + 1;
125
+ y0 = (int)floor(yl - box_height/2.0 - 0.5) + 1;
126
+ x1 = (int)floor(xl + box_width/2.0 - 0.5);
127
+ y1 = (int)floor(yl + box_height/2.0 - 0.5);
128
+
129
+ if (x0 == x1) x1++;
130
+ if (y0 == y1) y1++;
131
+
132
+ x0 = x0<0? 0: x0>width-1? width-1: x0;
133
+ y0 = y0<0? 0: y0>height-1? height-1: y0;
134
+ x1 = x1<0? 0: x1>width-1? width-1: x1;
135
+ y1 = y1<0? 0: y1>height-1? height-1: y1;
136
+
137
+ TU Value, LineValue;
138
+ float LineNorm, Norm, dxr, dyr;
139
+
140
+ Value = 0;
141
+ Norm = 0;
142
+
143
+ for (int y = y0; y <= y1; y++)
144
+ {
145
+ dyr = yl - (y+0.5f);
146
+ if (dyr < 0) dyr *= -1;
147
+
148
+ LineValue = 0;
149
+ LineNorm = 0;
150
+
151
+ for (int x = x0; x <= x1; x++)
152
+ {
153
+ dxr = xl - (x+0.5f);
154
+ if (dxr < 0) dxr *= -1;
155
+
156
+ LineValue += map[y*width+x] * dxr;
157
+ LineNorm += dxr;
158
+ }
159
+
160
+ Value += LineValue * dyr;
161
+ Norm += dyr * LineNorm;
162
+ }
163
+
164
+ if (Norm == 0)
165
+ {
166
+ Value = 0;
167
+ return (T)Value;
168
+ }
169
+
170
+ return (T)(Value/Norm);
171
+ }
172
+
173
+ /** Does Zero Order Interpolation (Nearest Neighborhood).
174
+ * \ingroup math */
175
+ template <class T>
176
+ inline T imZeroOrderInterpolation(int width, int height, T *map, float xl, float yl)
177
+ {
178
+ int x0 = imRound(xl-0.5f);
179
+ int y0 = imRound(yl-0.5f);
180
+ x0 = x0<0? 0: x0>width-1? width-1: x0;
181
+ y0 = y0<0? 0: y0>height-1? height-1: y0;
182
+ return map[y0*width + x0];
183
+ }
184
+
185
+ /** Does Bilinear Interpolation.
186
+ * \ingroup math */
187
+ template <class T>
188
+ inline T imBilinearInterpolation(int width, int height, T *map, float xl, float yl)
189
+ {
190
+ int x0, y0, x1, y1;
191
+ float t, u;
192
+
193
+ if (xl < 0.5)
194
+ {
195
+ x1 = x0 = 0;
196
+ t = 0;
197
+ }
198
+ else if (xl > width-0.5)
199
+ {
200
+ x1 = x0 = width-1;
201
+ t = 0;
202
+ }
203
+ else
204
+ {
205
+ x0 = (int)(xl-0.5f);
206
+ x1 = x0+1;
207
+ t = xl - (x0+0.5f);
208
+ }
209
+
210
+ if (yl < 0.5)
211
+ {
212
+ y1 = y0 = 0;
213
+ u = 0;
214
+ }
215
+ else if (yl > height-0.5)
216
+ {
217
+ y1 = y0 = height-1;
218
+ u = 0;
219
+ }
220
+ else
221
+ {
222
+ y0 = (int)(yl-0.5f);
223
+ y1 = y0+1;
224
+ u = yl - (y0+0.5f);
225
+ }
226
+
227
+ T fll = map[y0*width + x0];
228
+ T fhl = map[y0*width + x1];
229
+ T flh = map[y1*width + x0];
230
+ T fhh = map[y1*width + x1];
231
+
232
+ return (T)((fhh - flh - fhl + fll) * u * t +
233
+ (fhl - fll) * t +
234
+ (flh - fll) * u +
235
+ fll);
236
+ }
237
+
238
+ /** Does Bicubic Interpolation.
239
+ * \ingroup math */
240
+ template <class T, class TU>
241
+ inline T imBicubicInterpolation(int width, int height, T *map, float xl, float yl, TU Dummy)
242
+ {
243
+ int X[4], Y[4];
244
+ float t, u;
245
+ (void)Dummy;
246
+
247
+ if (xl > width-0.5)
248
+ {
249
+ X[3] = X[2] = X[1] = width-1;
250
+ X[0] = X[1]-1;
251
+ t = 0;
252
+ }
253
+ else
254
+ {
255
+ X[1] = (int)(xl-0.5f);
256
+ if (X[1] < 0) X[1] = 0;
257
+
258
+ X[0] = X[1]-1;
259
+ X[2] = X[1]+1;
260
+ X[3] = X[1]+2;
261
+
262
+ if (X[0] < 0) X[0] = 0;
263
+ if (X[3] > width-1) X[3] = width-1;
264
+
265
+ t = xl - (X[1]+0.5f);
266
+ }
267
+
268
+ if (yl > height-0.5)
269
+ {
270
+ Y[3] = Y[2] = Y[1] = height-1;
271
+ Y[0] = Y[1]-1;
272
+ u = 0;
273
+ }
274
+ else
275
+ {
276
+ Y[1] = (int)(yl-0.5f);
277
+ if (Y[1] < 0) Y[1] = 0;
278
+
279
+ Y[0] = Y[1]-1;
280
+ Y[2] = Y[1]+1;
281
+ Y[3] = Y[1]+2;
282
+
283
+ if (Y[0] < 0) Y[0] = 0;
284
+ if (Y[3] > height-1) Y[3] = height-1;
285
+
286
+ u = yl - (Y[1]+0.5f);
287
+ }
288
+
289
+ float CX[4], CY[4];
290
+
291
+ // Optimize calculations
292
+ {
293
+ float c, c2, c3;
294
+
295
+ #define C0 (-c3 + 2.0f*c2 - c)
296
+ #define C1 ( c3 - 2.0f*c2 + 1.0f)
297
+ #define C2 (-c3 + c2 + c)
298
+ #define C3 ( c3 - c2)
299
+
300
+ c = t;
301
+ c2 = c*c; c3 = c2*c;
302
+ CX[0] = C0; CX[1] = C1; CX[2] = C2; CX[3] = C3;
303
+
304
+ c = u;
305
+ c2 = c*c; c3 = c2*c;
306
+ CY[0] = C0; CY[1] = C1; CY[2] = C2; CY[3] = C3;
307
+
308
+ #undef C0
309
+ #undef C1
310
+ #undef C2
311
+ #undef C3
312
+ }
313
+
314
+ TU LineValue, Value;
315
+ float LineNorm, Norm;
316
+
317
+ Value = 0;
318
+ Norm = 0;
319
+
320
+ for (int y = 0; y < 4; y++)
321
+ {
322
+ LineValue = 0;
323
+ LineNorm = 0;
324
+
325
+ for (int x = 0; x < 4; x++)
326
+ {
327
+ LineValue += map[Y[y]*width+X[x]] * CX[x];
328
+ LineNorm += CX[x];
329
+ }
330
+
331
+ Value += LineValue * CY[y];
332
+ Norm += CY[y] * LineNorm;
333
+ }
334
+
335
+ if (Norm == 0)
336
+ {
337
+ Value = 0;
338
+ return (T)Value;
339
+ }
340
+
341
+ Value = (Value/Norm);
342
+
343
+ int size = sizeof(T);
344
+ if (size == 1)
345
+ return (T)(Value<=(TU)0? (TU)0: Value<=(TU)255? Value: (TU)255);
346
+ else
347
+ return (T)(Value);
348
+ }
349
+
350
+ /** Calculates minimum and maximum values.
351
+ * \ingroup math */
352
+ template <class T>
353
+ inline void imMinMax(const T *map, int count, T& min, T& max)
354
+ {
355
+ min = *map++;
356
+ max = min;
357
+ for (int i = 1; i < count; i++)
358
+ {
359
+ T value = *map++;
360
+
361
+ if (value > max)
362
+ max = value;
363
+ else if (value < min)
364
+ min = value;
365
+ }
366
+ }
367
+
368
+ #endif
@@ -0,0 +1,219 @@
1
+ /** \file
2
+ * \brief Math Operations
3
+ *
4
+ * See Copyright Notice in im_lib.h
5
+ */
6
+
7
+ #ifndef __IM_MATH_OP_H
8
+ #define __IM_MATH_OP_H
9
+
10
+ #include "im_complex.h"
11
+
12
+ //#define IM_NEARZERO 0.0000001f
13
+ //#define IM_NEARINF 10000000
14
+
15
+ /// Crop value to Byte limit
16
+ template <class T>
17
+ inline T crop_byte(const T& v)
18
+ {
19
+ return v <= 0? 0: v <= 255? v: 255;
20
+ }
21
+
22
+ /// Generic Addition with 2 template types
23
+ template <class T1, class T2>
24
+ inline T1 add_op(const T1& v1, const T2& v2)
25
+ {
26
+ return v2 + v1;
27
+ }
28
+
29
+ /// Generic Subtraction with 2 template types
30
+ template <class T1, class T2>
31
+ inline T1 sub_op(const T1& v1, const T2& v2)
32
+ {
33
+ return v2 - v1;
34
+ }
35
+
36
+ /// Generic Multiplication with 2 template types
37
+ template <class T1, class T2>
38
+ inline T1 mul_op(const T1& v1, const T2& v2)
39
+ {
40
+ return v2 * v1;
41
+ }
42
+
43
+ /// Generic Division with 2 template types
44
+ template <class T1, class T2>
45
+ inline T1 div_op(const T1& v1, const T2& v2)
46
+ {
47
+ // if (v2 == 0) return (T1)IM_NEARINF;
48
+ return v1 / v2;
49
+ }
50
+
51
+ /// Generic Invert
52
+ template <class T>
53
+ inline T inv_op(const T& v)
54
+ {
55
+ // if (v == 0) return (T)IM_NEARINF;
56
+ return 1/v;
57
+ }
58
+
59
+ /// Generic Difference with 2 template types
60
+ template <class T1, class T2>
61
+ inline T1 diff_op(const T1& v1, const T2& v2)
62
+ {
63
+ if (v1 <= v2)
64
+ return v2 - v1;
65
+ return v1 - v2;
66
+ }
67
+
68
+ /// Generic Minimum with 2 template types
69
+ template <class T1, class T2>
70
+ inline T1 min_op(const T1& v1, const T2& v2)
71
+ {
72
+ if (v1 <= v2)
73
+ return v1;
74
+ return v2;
75
+ }
76
+
77
+ /// Generic Maximum with 2 template types
78
+ template <class T1, class T2>
79
+ inline T1 max_op(const T1& v1, const T2& v2)
80
+ {
81
+ if (v1 <= v2)
82
+ return v2;
83
+ return v1;
84
+ }
85
+
86
+ inline imbyte pow_op(const imbyte& v1, const imbyte& v2)
87
+ {
88
+ return (imbyte)pow((float)v1, v2);
89
+ }
90
+
91
+ inline imushort pow_op(const imushort& v1, const imushort& v2)
92
+ {
93
+ return (imushort)pow((float)v1, v2);
94
+ }
95
+
96
+ inline int pow_op(const int& v1, const int& v2)
97
+ {
98
+ return (int)pow((float)v1, v2);
99
+ }
100
+
101
+ /// Generic Power with 2 template types
102
+ template <class T1, class T2>
103
+ inline T1 pow_op(const T1& v1, const T2& v2)
104
+ {
105
+ return (T1)pow(v1, v2);
106
+ }
107
+
108
+ /// Generic Abssolute
109
+ template <class T>
110
+ inline T abs_op(const T& v)
111
+ {
112
+ if (v <= 0)
113
+ return -1*v;
114
+ return v;
115
+ }
116
+
117
+ /// Generic Less
118
+ template <class T>
119
+ inline T less_op(const T& v)
120
+ {
121
+ return -1*v;
122
+ }
123
+
124
+ /// Generic Square
125
+ template <class T>
126
+ inline T sqr_op(const T& v)
127
+ {
128
+ return v*v;
129
+ }
130
+
131
+ inline int sqrt(const int& C)
132
+ {
133
+ return (int)sqrt(float(C));
134
+ }
135
+
136
+ /// Generic Square Root
137
+ template <class T>
138
+ inline T sqrt_op(const T& v)
139
+ {
140
+ return (T)sqrt(v);
141
+ }
142
+
143
+ inline int exp(const int& v)
144
+ {
145
+ return (int)exp((float)v);
146
+ }
147
+
148
+ /// Generic Exponential
149
+ template <class T>
150
+ inline T exp_op(const T& v)
151
+ {
152
+ return (T)exp(v);
153
+ }
154
+
155
+ inline int log(const int& v)
156
+ {
157
+ return (int)log((float)v);
158
+ }
159
+
160
+ /// Generic Logarithm
161
+ template <class T>
162
+ inline T log_op(const T& v)
163
+ {
164
+ // if (v <= 0) return (T)IM_NEARINF;
165
+ return (T)log(v);
166
+ }
167
+
168
+ // Dummy sin
169
+ inline imcfloat sin(const imcfloat& v)
170
+ {
171
+ return (v);
172
+ }
173
+
174
+ inline int sin(const int& v)
175
+ {
176
+ return (int)sin((float)v);
177
+ }
178
+
179
+ /// Generic Sine
180
+ template <class T>
181
+ inline T sin_op(const T& v)
182
+ {
183
+ return (T)sin(v);
184
+ }
185
+
186
+ inline int cos(const int& v)
187
+ {
188
+ return (int)cos((float)v);
189
+ }
190
+
191
+ // Dummy cos
192
+ inline imcfloat cos(const imcfloat& v)
193
+ {
194
+ return (v);
195
+ }
196
+
197
+ /// Generic Cosine
198
+ template <class T>
199
+ inline T cos_op(const T& v)
200
+ {
201
+ return (T)cos(v);
202
+ }
203
+
204
+ /// Sets a bit in an array
205
+ inline void imDataBitSet(imbyte* data, int index, int bit)
206
+ {
207
+ if (bit)
208
+ data[index / 8] |= (0x01 << (7 - (index % 8)));
209
+ else
210
+ data[index / 8] &= ~(0x01 << (7 - (index % 8)));
211
+ }
212
+
213
+ /// Gets a bit from an array
214
+ inline int imDataBitGet(imbyte* data, int index)
215
+ {
216
+ return (data[index / 8] >> (7 - (index % 8))) & 0x01;
217
+ }
218
+
219
+ #endif