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.
- data/Rakefile +97 -0
- data/doc/README +10 -0
- data/doc/build_install.txt +77 -0
- data/examples/README +16 -0
- data/examples/ctrl/cbox.rb +221 -0
- data/examples/ctrl/checkboard.rb +33 -0
- data/examples/ctrl/degrade.rb +73 -0
- data/examples/ctrl/example1.rb +53 -0
- data/examples/ctrl/example2.rb +39 -0
- data/examples/ctrl/iupcolorbar.rb +95 -0
- data/examples/ctrl/iupcolorbrowser.rb +45 -0
- data/examples/ctrl/iupdial.rb +117 -0
- data/examples/ctrl/iupgauge.rb +242 -0
- data/examples/ctrl/iupgetcolor.rb +8 -0
- data/examples/ctrl/iupgetparam.rb +62 -0
- data/examples/ctrl/iupglcanvas.rb +172 -0
- data/examples/ctrl/iupmask.rb +15 -0
- data/examples/ctrl/iupmatrix.rb +39 -0
- data/examples/ctrl/iupplot2.rb +603 -0
- data/examples/ctrl/iuptabs.rb +22 -0
- data/examples/ctrl/iuptree.rb +190 -0
- data/examples/ctrl/iupval.rb +71 -0
- data/examples/ctrl/numbering.rb +46 -0
- data/examples/ctrl/sample.rb +166 -0
- data/examples/dlg/iupalarm.rb +14 -0
- data/examples/dlg/iupfiledlg.rb +19 -0
- data/examples/dlg/iupgetfile.rb +19 -0
- data/examples/dlg/iuplistdialog.rb +26 -0
- data/examples/dlg/iupmessage.rb +5 -0
- data/examples/dlg/iupscanf.rb +17 -0
- data/examples/elem/iupbutton.rb +197 -0
- data/examples/elem/iupcanvas.rb +27 -0
- data/examples/elem/iupcanvas2.rb +113 -0
- data/examples/elem/iupcanvas3.rb +62 -0
- data/examples/elem/iupdialog.rb +71 -0
- data/examples/elem/iupdialog2.rb +25 -0
- data/examples/elem/iupfill.rb +51 -0
- data/examples/elem/iupframe.rb +25 -0
- data/examples/elem/iuphbox.rb +68 -0
- data/examples/elem/iupimage.rb +113 -0
- data/examples/elem/iupitem.rb +60 -0
- data/examples/elem/iuplabel.rb +57 -0
- data/examples/elem/iuplist.rb +41 -0
- data/examples/elem/iuplist2.rb +125 -0
- data/examples/elem/iupmenu.rb +32 -0
- data/examples/elem/iupmultiline.rb +24 -0
- data/examples/elem/iupmultiline2.rb +156 -0
- data/examples/elem/iupradio.rb +32 -0
- data/examples/elem/iupseparator.rb +81 -0
- data/examples/elem/iupsubmenu.rb +85 -0
- data/examples/elem/iuptext.rb +61 -0
- data/examples/elem/iuptimer.rb +36 -0
- data/examples/elem/iuptoggle.rb +110 -0
- data/examples/elem/iupvbox.rb +87 -0
- data/examples/elem/iupzbox.rb +60 -0
- data/examples/elem/mdisample.rb +376 -0
- data/examples/elem/progressbar.rb +294 -0
- data/examples/elem/scrollbar.rb +66 -0
- data/examples/elem/tray.rb +90 -0
- data/examples/func/iupgetattribute.rb +32 -0
- data/examples/func/iupidle.rb +48 -0
- data/ext/extconf.rb +27 -0
- data/ext/iup-linux/include/cd.h +494 -0
- data/ext/iup-linux/include/cd_canvas.hpp +358 -0
- data/ext/iup-linux/include/cd_old.h +158 -0
- data/ext/iup-linux/include/cd_private.h +362 -0
- data/ext/iup-linux/include/cdcgm.h +34 -0
- data/ext/iup-linux/include/cdclipbd.h +22 -0
- data/ext/iup-linux/include/cddbuf.h +23 -0
- data/ext/iup-linux/include/cddebug.h +24 -0
- data/ext/iup-linux/include/cddgn.h +23 -0
- data/ext/iup-linux/include/cddxf.h +22 -0
- data/ext/iup-linux/include/cdemf.h +22 -0
- data/ext/iup-linux/include/cdgdiplus.h +29 -0
- data/ext/iup-linux/include/cdimage.h +23 -0
- data/ext/iup-linux/include/cdirgb.h +30 -0
- data/ext/iup-linux/include/cdiup.h +22 -0
- data/ext/iup-linux/include/cdlua.h +39 -0
- data/ext/iup-linux/include/cdlua3_private.h +120 -0
- data/ext/iup-linux/include/cdlua5_private.h +141 -0
- data/ext/iup-linux/include/cdluaim.h +24 -0
- data/ext/iup-linux/include/cdluaiup.h +27 -0
- data/ext/iup-linux/include/cdluapdf.h +27 -0
- data/ext/iup-linux/include/cdmf.h +24 -0
- data/ext/iup-linux/include/cdmf_private.h +32 -0
- data/ext/iup-linux/include/cdnative.h +26 -0
- data/ext/iup-linux/include/cdpdf.h +38 -0
- data/ext/iup-linux/include/cdpicture.h +22 -0
- data/ext/iup-linux/include/cdprint.h +23 -0
- data/ext/iup-linux/include/cdps.h +37 -0
- data/ext/iup-linux/include/cdwmf.h +22 -0
- data/ext/iup-linux/include/im.h +282 -0
- data/ext/iup-linux/include/im_attrib.h +116 -0
- data/ext/iup-linux/include/im_attrib_flat.h +39 -0
- data/ext/iup-linux/include/im_binfile.h +214 -0
- data/ext/iup-linux/include/im_capture.h +365 -0
- data/ext/iup-linux/include/im_color.h +465 -0
- data/ext/iup-linux/include/im_colorhsi.h +61 -0
- data/ext/iup-linux/include/im_complex.h +160 -0
- data/ext/iup-linux/include/im_convert.h +127 -0
- data/ext/iup-linux/include/im_counter.h +69 -0
- data/ext/iup-linux/include/im_dib.h +195 -0
- data/ext/iup-linux/include/im_file.h +111 -0
- data/ext/iup-linux/include/im_format.h +79 -0
- data/ext/iup-linux/include/im_format_all.h +576 -0
- data/ext/iup-linux/include/im_format_avi.h +87 -0
- data/ext/iup-linux/include/im_format_ecw.h +93 -0
- data/ext/iup-linux/include/im_format_jp2.h +78 -0
- data/ext/iup-linux/include/im_format_raw.h +64 -0
- data/ext/iup-linux/include/im_format_wmv.h +100 -0
- data/ext/iup-linux/include/im_image.h +403 -0
- data/ext/iup-linux/include/im_kernel.h +315 -0
- data/ext/iup-linux/include/im_lib.h +191 -0
- data/ext/iup-linux/include/im_math.h +368 -0
- data/ext/iup-linux/include/im_math_op.h +219 -0
- data/ext/iup-linux/include/im_palette.h +172 -0
- data/ext/iup-linux/include/im_plus.h +73 -0
- data/ext/iup-linux/include/im_process.h +35 -0
- data/ext/iup-linux/include/im_process_ana.h +221 -0
- data/ext/iup-linux/include/im_process_glo.h +170 -0
- data/ext/iup-linux/include/im_process_loc.h +577 -0
- data/ext/iup-linux/include/im_process_pon.h +712 -0
- data/ext/iup-linux/include/im_raw.h +34 -0
- data/ext/iup-linux/include/im_util.h +277 -0
- data/ext/iup-linux/include/imlua.h +83 -0
- data/ext/iup-linux/include/iup.h +255 -0
- data/ext/iup-linux/include/iup_pplot.h +40 -0
- data/ext/iup-linux/include/iupcb.h +25 -0
- data/ext/iup-linux/include/iupcbox.h +23 -0
- data/ext/iup-linux/include/iupcbs.h +42 -0
- data/ext/iup-linux/include/iupcells.h +130 -0
- data/ext/iup-linux/include/iupcolorbar.h +126 -0
- data/ext/iup-linux/include/iupcompat.h +62 -0
- data/ext/iup-linux/include/iupcontrols.h +40 -0
- data/ext/iup-linux/include/iupcpi.h +76 -0
- data/ext/iup-linux/include/iupdef.h +520 -0
- data/ext/iup-linux/include/iupdial.h +64 -0
- data/ext/iup-linux/include/iupgauge.h +57 -0
- data/ext/iup-linux/include/iupgc.h +20 -0
- data/ext/iup-linux/include/iupgetparam.h +27 -0
- data/ext/iup-linux/include/iupgl.h +101 -0
- data/ext/iup-linux/include/iupim.h +21 -0
- data/ext/iup-linux/include/iupkey.h +290 -0
- data/ext/iup-linux/include/iuplua.h +41 -0
- data/ext/iup-linux/include/iuplua_pplot.h +26 -0
- data/ext/iup-linux/include/iupluacontrols.h +27 -0
- data/ext/iup-linux/include/iupluagl.h +26 -0
- data/ext/iup-linux/include/iupluaim.h +26 -0
- data/ext/iup-linux/include/iupluaole.h +26 -0
- data/ext/iup-linux/include/iupmask.h +52 -0
- data/ext/iup-linux/include/iupmatrix.h +69 -0
- data/ext/iup-linux/include/iupole.h +24 -0
- data/ext/iup-linux/include/iupsbox.h +20 -0
- data/ext/iup-linux/include/iupspeech.h +23 -0
- data/ext/iup-linux/include/iupspin.h +21 -0
- data/ext/iup-linux/include/iuptabs.h +79 -0
- data/ext/iup-linux/include/iuptree.h +93 -0
- data/ext/iup-linux/include/iupval.h +46 -0
- data/ext/iup-linux/include/lauxlib.h +174 -0
- data/ext/iup-linux/include/lua.h +388 -0
- data/ext/iup-linux/include/lua.hpp +9 -0
- data/ext/iup-linux/include/luaconf.h +763 -0
- data/ext/iup-linux/include/lualib.h +53 -0
- data/ext/iup-linux/include/old_im.h +59 -0
- data/ext/iup-linux/include/wd.h +78 -0
- data/ext/iup-linux/include/wd_old.h +85 -0
- data/ext/iup-linux/libcd.so +0 -0
- data/ext/iup-linux/libcdcontextplus.so +0 -0
- data/ext/iup-linux/libcdluacontextplus51.so +0 -0
- data/ext/iup-linux/libcdpdf.so +0 -0
- data/ext/iup-linux/libfreetype.so +0 -0
- data/ext/iup-linux/libim.so +0 -0
- data/ext/iup-linux/libim_fftw.so +0 -0
- data/ext/iup-linux/libim_jp2.so +0 -0
- data/ext/iup-linux/libim_process.so +0 -0
- data/ext/iup-linux/libiup.so +0 -0
- data/ext/iup-linux/libiup_pplot.so +0 -0
- data/ext/iup-linux/libiupcd.so +0 -0
- data/ext/iup-linux/libiupcontrols.so +0 -0
- data/ext/iup-linux/libiupgl.so +0 -0
- data/ext/iup-linux/libiupim.so +0 -0
- data/ext/iup-linux/libiupimglib.so +0 -0
- data/ext/iup-linux/libpdflib.so +0 -0
- data/ext/iup-win32/cd.dll +0 -0
- data/ext/iup-win32/cd.lib +0 -0
- data/ext/iup-win32/cdcontextplus.dll +0 -0
- data/ext/iup-win32/cdcontextplus.lib +0 -0
- data/ext/iup-win32/cdlua51.lib +0 -0
- data/ext/iup-win32/cdluacontextplus51.lib +0 -0
- data/ext/iup-win32/cdluaim51.lib +0 -0
- data/ext/iup-win32/cdluapdf51.lib +0 -0
- data/ext/iup-win32/cdpdf.dll +0 -0
- data/ext/iup-win32/cdpdf.lib +0 -0
- data/ext/iup-win32/freetype6.dll +0 -0
- data/ext/iup-win32/freetype6.lib +0 -0
- data/ext/iup-win32/im.dll +0 -0
- data/ext/iup-win32/im_avi.dll +0 -0
- data/ext/iup-win32/im_capture.dll +0 -0
- data/ext/iup-win32/im_ecw.dll +0 -0
- data/ext/iup-win32/im_fftw.dll +0 -0
- data/ext/iup-win32/im_jp2.dll +0 -0
- data/ext/iup-win32/im_process.dll +0 -0
- data/ext/iup-win32/im_wmv.dll +0 -0
- data/ext/iup-win32/include/cd.h +494 -0
- data/ext/iup-win32/include/cd_canvas.hpp +358 -0
- data/ext/iup-win32/include/cd_old.h +158 -0
- data/ext/iup-win32/include/cd_private.h +362 -0
- data/ext/iup-win32/include/cdcgm.h +34 -0
- data/ext/iup-win32/include/cdclipbd.h +22 -0
- data/ext/iup-win32/include/cddbuf.h +23 -0
- data/ext/iup-win32/include/cddebug.h +24 -0
- data/ext/iup-win32/include/cddgn.h +23 -0
- data/ext/iup-win32/include/cddxf.h +22 -0
- data/ext/iup-win32/include/cdemf.h +22 -0
- data/ext/iup-win32/include/cdgdiplus.h +29 -0
- data/ext/iup-win32/include/cdimage.h +23 -0
- data/ext/iup-win32/include/cdirgb.h +30 -0
- data/ext/iup-win32/include/cdiup.h +22 -0
- data/ext/iup-win32/include/cdlua.h +39 -0
- data/ext/iup-win32/include/cdlua3_private.h +120 -0
- data/ext/iup-win32/include/cdlua5_private.h +141 -0
- data/ext/iup-win32/include/cdluaim.h +24 -0
- data/ext/iup-win32/include/cdluaiup.h +27 -0
- data/ext/iup-win32/include/cdluapdf.h +27 -0
- data/ext/iup-win32/include/cdmf.h +24 -0
- data/ext/iup-win32/include/cdmf_private.h +32 -0
- data/ext/iup-win32/include/cdnative.h +26 -0
- data/ext/iup-win32/include/cdpdf.h +38 -0
- data/ext/iup-win32/include/cdpicture.h +22 -0
- data/ext/iup-win32/include/cdprint.h +23 -0
- data/ext/iup-win32/include/cdps.h +37 -0
- data/ext/iup-win32/include/cdwmf.h +22 -0
- data/ext/iup-win32/include/iup.h +255 -0
- data/ext/iup-win32/include/iup_pplot.h +40 -0
- data/ext/iup-win32/include/iupcb.h +25 -0
- data/ext/iup-win32/include/iupcbox.h +23 -0
- data/ext/iup-win32/include/iupcbs.h +42 -0
- data/ext/iup-win32/include/iupcells.h +130 -0
- data/ext/iup-win32/include/iupcolorbar.h +126 -0
- data/ext/iup-win32/include/iupcompat.h +62 -0
- data/ext/iup-win32/include/iupcontrols.h +40 -0
- data/ext/iup-win32/include/iupcpi.h +76 -0
- data/ext/iup-win32/include/iupdef.h +520 -0
- data/ext/iup-win32/include/iupdial.h +64 -0
- data/ext/iup-win32/include/iupgauge.h +57 -0
- data/ext/iup-win32/include/iupgc.h +20 -0
- data/ext/iup-win32/include/iupgetparam.h +27 -0
- data/ext/iup-win32/include/iupgl.h +101 -0
- data/ext/iup-win32/include/iupim.h +21 -0
- data/ext/iup-win32/include/iupkey.h +290 -0
- data/ext/iup-win32/include/iuplua.h +41 -0
- data/ext/iup-win32/include/iuplua_pplot.h +26 -0
- data/ext/iup-win32/include/iupluacontrols.h +27 -0
- data/ext/iup-win32/include/iupluagl.h +26 -0
- data/ext/iup-win32/include/iupluaim.h +26 -0
- data/ext/iup-win32/include/iupluaole.h +26 -0
- data/ext/iup-win32/include/iupmask.h +52 -0
- data/ext/iup-win32/include/iupmatrix.h +69 -0
- data/ext/iup-win32/include/iupole.h +24 -0
- data/ext/iup-win32/include/iupsbox.h +20 -0
- data/ext/iup-win32/include/iupspeech.h +23 -0
- data/ext/iup-win32/include/iupspin.h +21 -0
- data/ext/iup-win32/include/iuptabs.h +79 -0
- data/ext/iup-win32/include/iuptree.h +93 -0
- data/ext/iup-win32/include/iupval.h +46 -0
- data/ext/iup-win32/include/wd.h +78 -0
- data/ext/iup-win32/include/wd_old.h +85 -0
- data/ext/iup-win32/iup.dll +0 -0
- data/ext/iup-win32/iup.lib +0 -0
- data/ext/iup-win32/iup_pplot.dll +0 -0
- data/ext/iup-win32/iup_pplot.lib +0 -0
- data/ext/iup-win32/iupcd.dll +0 -0
- data/ext/iup-win32/iupcd.lib +0 -0
- data/ext/iup-win32/iupcontrols.dll +0 -0
- data/ext/iup-win32/iupcontrols.lib +0 -0
- data/ext/iup-win32/iupgl.dll +0 -0
- data/ext/iup-win32/iupgl.lib +0 -0
- data/ext/iup-win32/iupim.dll +0 -0
- data/ext/iup-win32/iupim.lib +0 -0
- data/ext/iup-win32/iupimglib.dll +0 -0
- data/ext/iup-win32/iupimglib.lib +0 -0
- data/ext/iup-win32/iuplua51.lib +0 -0
- data/ext/iup-win32/iuplua_pplot51.lib +0 -0
- data/ext/iup-win32/iupluacd51.lib +0 -0
- data/ext/iup-win32/iupluacontrols51.lib +0 -0
- data/ext/iup-win32/iupluagl51.lib +0 -0
- data/ext/iup-win32/iupluaim51.lib +0 -0
- data/ext/iup-win32/iupluaimglib51.lib +0 -0
- data/ext/iup-win32/iupluaole51.lib +0 -0
- data/ext/iup-win32/iupole.dll +0 -0
- data/ext/iup-win32/iupole.lib +0 -0
- data/ext/iup-win32/iupstub.lib +0 -0
- data/ext/iup-win32/pdflib.dll +0 -0
- data/ext/iup-win32/pdflib.lib +0 -0
- data/ext/iup.c +1261 -0
- data/ext/mkrf_conf.rb +72 -0
- data/ext/rb_cd.h +1525 -0
- data/ext/rb_iup.h +2446 -0
- data/ext/rb_iup_pplot.h +129 -0
- data/ext/rb_iupcb.h +13 -0
- data/ext/rb_iupcbox.h +40 -0
- data/ext/rb_iupcells.h +15 -0
- data/ext/rb_iupcolorbar.h +17 -0
- data/ext/rb_iupcompat.h +237 -0
- data/ext/rb_iupcontrols.h +28 -0
- data/ext/rb_iupdef.h +3 -0
- data/ext/rb_iupdial.h +24 -0
- data/ext/rb_iupgauge.h +15 -0
- data/ext/rb_iupgc.h +18 -0
- data/ext/rb_iupgetparam.h +72 -0
- data/ext/rb_iupgl.h +58 -0
- data/ext/rb_iupim.h +25 -0
- data/ext/rb_iupmask.h +189 -0
- data/ext/rb_iupmatrix.h +80 -0
- data/ext/rb_iupole.h +24 -0
- data/ext/rb_iupsbox.h +23 -0
- data/ext/rb_iupspeech.h +25 -0
- data/ext/rb_iupspin.h +29 -0
- data/ext/rb_iuptabs.h +29 -0
- data/ext/rb_iuptree.h +94 -0
- data/ext/rb_iupval.h +24 -0
- data/lib/README +1 -0
- 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
|