Squashed 'external/CImg/' changes from c0becdf88..4d061dcd6

4d061dcd6 math_parser(): Add function 'map()'.
ac599e123 .
b9fa7354f .
673cfe3d5 math_parser(): add mutex to protect access to image list statistics.
862b2c7b1 Fix bug in math evaluator function 'find()', and improve 'colormap' in 'full-colormap' mode.
44b1d556c draw_text(): Fix (non-standard) passing reference to va_start() macro.
6db20df4f .
03b2203ea .
f9619587b math_parser::da_remove(): Improve error message when trying to remove element in empty dynamic array.
3486b3ee7 Remove unused version of _sprintf().
07040bb0e Fix warning about using 'vsprintf()' with clang-12.
5f667e2c7 .
e6c7b23c9 .
099447df4 .
e89b77dfa .
1d5505416 .
163cf1caa .
40a666909 .
86e55504c .
381ba0bfa .
b886800ad .
31648450a .
2e82b7cd9 .
2daf2862f .
c6e4360df .
6c94a6b20 .
d212c0ce3 .
5ff6f38d5 .
3e7a4f21d .
ccf1db65e .
a411cc180 .
e0018918b .
23903475c .
6a8b81169 Command 'text': Custom font can be specified.
a2dea0866 .
d31902272 Fix bug in 3D convolution operator.
210b728a3 math_parser(): add new predefined variable 'v' (eq. to 'u(-1,-1)').
b030ea4e6 math_parser() : Fix parsing arguments for function 'permut()'.
f90e52c4d math_parser: Allow 'norm()' to return a const value when possible.
17b8f5bb5 .
6ffe10e13 .
3c7b877b3 Improve inner/outer parallelization decision in 'correlate/convolve' methods.
56e2268b4 .
f4eeec4d2 .
00ce10760 .
bf0f5dcb2 .
45df40a35 .
43950e631 .
a73a2f129 .
1d033f1da math_parser: Start implementation of function 'offset()'.
0f673c279 .
59a34f2fe .
815c40021 .
422d6ecc3 .
b0ab9037b .
e2af0d091 .
b41f7850e .
aebccaad9 .
9d60f335e .
c65104e8c .
9ac2b7ae1 .
43558edca .
6cd4e15e6 .
fc2ca5606 .
aa5b1149b math_parser: Refactor function 'draw()', and prepare for variant that draws in vector-valued variables.
6c47625f3 .
8d1bbe3ef .
d5fcd765c .
6c43cf325 .
0d54f89e7 .
56cc9a806 .
60411ef05 .
009594d2d .
acf1a2a70 .
8d3bfe7fc .
7078e25a5 .
3d56cac0c .
ea0074152 .
4977f9500 math_parser: Prepare code for implementing 'crop()' on vector-valued variables.
382ad1b59 .
8834a487e cimg_math_parser(): Be more strict in the use of vector-valued arguments for some functions.
c33802810 .
4b3653922 Remove useless test with 'is_relative' for math_parser's  function.
732986f3e .
94f12f994 Allow creation of animated .gif with transparent backgrounds.
f3a5ba719 .
866b6d752 .
f2dc3ef7b Fix issue #368.
55ff59944 .
386fd1871 .
a456e9010 .
28a857b69 .
110ca2d87 .
404303418 .
2e2e0c5e8 .
bf7b13196 .
91b63f722 .
be47c0a33 .
7d232bdbf .
e6012687d Merge pull request #367 from GreycLab/master
642cebcfd .
f650e941d .
50a4ab03f .
cdedc97f8 .
9ec047a1b .
65c462cab .
2eb56a718 Merge pull request #366 from marsh0/develop
a8939b6ef .
334b3e9c1 Fixed unsigned int 64 to unsigned int warning
8e72d80fd .
e3cc84697 .
b1c13dfc5 .
fb79a9d3e Improve computation of matrix pseudoinverse with LU solver.
76fae2fcd Add option 'use_LU' to command 'solve' and math function 'solve()'.
bb03df435 .
d86916333 Merge commands and math functions 'invert' and 'pseudoinvert'.
49f61eb8a Merge commands and math functions 'invert' and 'pseudoinvert'.
a63492bcd Merge commands and math functions 'invert' and 'pseudoinvert'.
a403c817e Add 'lambda' option to the various 'pseudoinvert()' functions.
ca21c1d73 .
e0a825b1a .
931b498a5 .
9112b4711 .
f52871859 .
31dabfb13 Start work on next version 3.2.0.
1e1078317 .
7f3157a04 .
03f877161 _cimg_math_parser(): Slightly change behavior of 'isin()' to allow testing vectors.
c63cf71c7 .
1921b379a .
ec000cd2e cimg_math_parser(): Fix bug in accessing predefined variables 'i0,...i9'.
c3cef822b Merge branch 'master' of github.com:GreycLab/CImg
a28648518 .
9a0f19ded cimg_math_parser(): Fix incorrect handling of 'yM' (regression).
bbad387b3 Merge pull request #359 from bkmgit/ci
c5dcd933e Add badge with build status
b3059fa96 Update branch name
bd0eff91d Merge branch 'master' of github.com:GreycLab/CImg
c6f53e867 _cimg_math_parser(): New predefined variable 'id' (std of current image).
7d5619934 Merge pull request #358 from bkmgit/ci
db2e449fd Add 3 new postcards.
21c168170 Fix wrong detection of multi-threaded expression error in 'CImg<T>::fill()'.
ecfc076a5 Update MacOS dependencies
67ce48f35 Update MacOS dependencies
9c14a9000 Update MacOS dependencies
4184a25ba Update dependencies
813ed36bc Update dependencies
94b62e7fb More formatting fixes
ab395bb38 Formatting fixes
052e71ba7 Enable testing
3405584e2 .
5ad3d1af1 Add math parser function 'da_freeze'.
f53b5ab9c .
957ecc309 .
5934122c9 Add postcard #77.
cb93f21c1 Add postcard #77.
2835ec2e2 .
27ffac840 .
f68f333dd .
f25f7e1e8 .
80e582a0c .
406fbd072 Merge pull request #355 from Poohl/develop
a580234ef font size doc
ae654a628 Final release 3.1.4
e35d78341 Auto-commit for release 3.1.4_pre
54ff2d7af .
25bd0c3c6 .
3bb6458fc Simplify error handling in 'get()'.
39b4f963a .
568b34c4a Make 'swap()' return 'nan'.
0cdfb6714 Make 'set()' return 'nan'.
69a03bf83 Make 'copy()' return 'nan'.
da854d5ae Invert argument order in math function 'store()'.
8f493f7cd Invert argument order in math function 'set()'.
6f1ea6eab .
e82ed2c61 .
f511bb5c8 .
a35cb93e7 .
a452d475c .
2bc84810b .
ab4381619 Merge pull request #353 from amyspark/amyspark/support-msvc
aa4455fe4 Support MSVC's OpenMP 2.0
5f26c8745 .
6f8ee7c07 .
a01439210 Change variable name '_res' to '_resu' to avoid conflict with other badly written libraries.
480b2f0fb Add command 'eye'.
921772323 Start work on 3.1.3 version.
21ba6b4db .
8637d8f4d Define 'cimg_max_buf_size' to another value for 32-bits architectures.
d8bb494d6 Define 'cimg_max_buf_size' to another value for 32-bits architectures.
e8affb299 .
47e249d38 Fix bug with 'break'.
8fe779e8a Final release 3.1.1
e01419fc5 .
52b3d735a .
c4ddd6131 Update plug-in 'cvMat.h'.
104cfb8a6 Start 3.1.1: Fix possible misinterpretation of arithmetic expression in ':=' assignment.
1d1c75c36 .
bc010ab25 .
d27c30fe1 .
254a4cf7b .
5801be3d2 Merge pull request #348 from 7unn3l/master
37cf0c1e5 add global hardening against RAM exhaustions in safe_size
6b78c3b3f .
7b7688dc8 .
c3c8c22d6 .
471083bbd .
efd8d2965 .
577bf7b50 .
9d03892e3 .
f8dba12b8 .
3ca5dcea2 .
29bdc1dce .
a63b71bf0 .
22f226f4c .
761d5c085 .
1665172bb .
c7ee7bc9b .
193abd7b2 Add macro 'cimg_max_file_size' to control maximum allowed file size when reading image files.
0f7f7fb45 .
619cb58dd CImg<>::load_bmp() and CImg<>::load_pandore(): Check that dimensions encoded in file does not exceed file size.
d0f152d53 Fix offset issue when dealing with large images in 'CImg<T>::erode()' and 'CImg<T>::dilate()'.
607aea7c8 Fix 'get()' in math parser.
8824c078d .
0da4cb0ac .
d9a56919a .
52bc43848 .
a02df736a Allow command 'store' to manage bigger images.
0cf328ab6 .
d54761b9b .
72e5e6314 Remove unused variables in 'CImg<T>::opening()' and 'CImg<T>::closing()'
466022095 Format code to 120 max char./line.
790710040 Merge pull request #340 from amyspark/amyspark/powershell
712078d3f load_network: add Powershell fallback for Windows
e7eb920b7 .
fc6ba0eec Add 'CImg<T>::otsu()'.
8404b81a0 .
877ba9da8 CImg<T>::opening() and CImg<T>::closing(): Use min/max of type T rather than min/max of image values, for initialization.
3cd82ea4f Add methods 'CImg<T>::opening()' and 'CImg<T>::get_opening()'
640195d02 Add methods 'CImg<T>::closing()' and 'CImg<T>::get_closing()'
94a7c7f13 .
4171fb912 .
b5f2177c5 .
3200701db .
fddf9334f .
555019468 .
353cd8fbe .
c864cb0ac .
97c2923c0 .
366977648 .
66261e676 .
baf9a8009 .
a87a42217 .
2e99e630c .
23c738e85 .
8a17cb81a .
8b23cf36b .
1190e3f98 .
ae4c10e71 .
b6febab4c .
891d91621 Fix libtiff compilation issues with uint16_t and uint32 datatypes.
ee4dc2f93 .
1189d5050 .
0a260f407 .
983c502b4 .
376ac7316 .
d51bccfce .
82d6b436d .
3b7421231 Update README.md
d7ea859fc .
4efbe8a4f .
fb39f7c96 .
abbcd69f2 .
5651a141f .
6816343ca .
96661b16f .
159baf24f Improve default image normalization behavior with CImgDisplay with integer types.
349274537 .
53cf0df32 Fix multithreading in 'structuretensors()' computation.
1bff57ea5 .
44df5b111 Fix compilation errors for type T=half.
dd1139da4 .
b4365b74b Auto-commit for release 3.0.3_pre
410a7eaad .
52cdaf7ff .
e09678a3d Start work on 3.0.3.
e15278726 Final release 3.0.2
927fee511 .
798007eaa .
a7eebc5c4 .
a27910604 .
032128ac2 .
ac7980fc6 Start work on 3.0.2.
99a27d921 .
ed6984ca2 .
51295de3e .
7c81d801c .
d822b418f .
bcdbaeb61 .
2798b9ea7 .
a5465c18a .
8ad66d28d Final release 3.0.1
0a7c58232 .
d67062b57 .
b86e97ba5 .
0a346c624 _cimg_math_parser: Fix 'da_remove()' when used with multi-channel arrays.
6300c47a1 .
4cd0579d4 math_parser : Add functions 'printc()' and 'printcs()'.
0bda75c10 Fix #337.
d3190b26f .
c5b1a4ce0 Simplify _cimg_math_parser() by merging listin and listout into imglist variable.
db7586fb4 .
de80b8a82 .
93e45d310 [math-core-301] Fix floating point exception when functions da_*() are used with no images on the list.
d4cc50b95 .
f88c9148f .
ba89271ed Final release 3.0.0
e6ef1ad73 .
f687c4629 .
30991fb16 .
26e166b8d .
c0995a47f .
3f4dc79a2 .
4d331435d .
64952efb9 .
dbc19c290 .
9adb5bdb0 .
f72d88d63 .
4d8ee52e6 .
73fef7018 .
175a53870 .
e6cfba22a .
87bd9d126 .
10abd5fac .
00e896a07 .
1cffd322a .
e2e9baab6 .
b05d14e3e Add more boundary conditions to 'boxfilter'.
c39bb2503 .
aebc12a82 .
fa5f067e0 .
63312e7d8 .
a93108d4e Fix bug in 'correlate()'.
e1e77b7c6 .
62bc6b134 math_parser, function merge(): check that specified variable is not a linked reference.
132bb175b .
e0fd8a9b4 .
637eb4c2c .
237a1f4b8 .
481df9dbe .
8d502a5fe .
2ee5b1670 .
63a4fa78d .
5c4860ef3 math_parser: Add functions 'da_back()' and 'da_pop()'.
50c0d9839 math_parser: Add functions 'da_back()' and 'da_pop()'.
67f8c6e4b .
2d2c7f953 .
bb98b67b7 .
6acf1c19e .
c60635e01 .
d6c50bfee .
9798f569d .
5f63bc3d8 .
b2f29613e .
f30babb43 .
920965b0d .
8e01f2833 .
93408dc74 .
6faf752ff .
5a1a2bd92 .
bbecd96f2 .
af9c0a434 .
035125b20 Fix CImg<T>::draw_triangle(), with color-interpolated triangles (Fix #332).
8f949732d .
22190d30e .
bc0160d79 .
c2022354d .
72378e8e3 .
04638b8cd .
527aa2233 .
a6d4956bc .
f09c2b145 .
c967157af .
bedf7d5ea .
de0612004 .
62d3898a9 .
254d842ee .
c0a74ff77 .
5c13300f3 .
2352831c1 .
6e5a14a23 .
e020fdf47 .
60bf6e4ec .
4e9f06083 .
a95a0dcdb .
bd37c5755 .
ba155fd42 .
1a6e02309 .
f1ba20b82 .
04b3f1e29 .
c9eabd65d .
7089938f6 .
47d3a2ea6 .
bcf797fea .
04e037028 .
79ea94dd4 .
7bdd3f9ba .
fbd0be3a1 .
b4f703517 Start the work for supporting new type 'list' in math parser.
f6860f51b Merge pull request #329 from Irgy0/master
41f0d3777 .
8eaf50b64 .
2b7e44e57 .
535924dca Set PNG interlacing on to avoid an error message when reading interlaced pngs.
df4e034f8 .
6c051eb27 Improve detection of .raw files (CR2,NEF,DNG,ARW).
25aaf3850 .
48173196c Fix a few int-overflow bug that could happen in draw_line().
bcfe7c7b2 Start work on v.3.0.0. Fix bug in CImg<T>::draw_polygon() when large integers are used.
cd95217c0 Final release 2.9.9
506fcb51b .
b33dcc8f9 .
96114de6d .
25612a629 .
4ffd314d9 .
4314d6e25 .
90dba23bc .
06dc60988 .
e3e62d883 Add a few optimized pattern detected to evaluate simple math expressions.
c4a7e078a .
595c34a29 .
288e6b8d5 .
c82328019 Optimize CImg<T>::_correlate().
2d83233c4 Merge pull request #322 from xen0n/fix-f1996f1
70876dde3 .
3544285d1 Auto-commit for release 2.9.9_pre
5304630b6 .
eb50adb88 Bump to development version 2.99
2d2731eb6 examples: probe for -mtune=generic support, fix wrong LoongArch support
2e01be63d .
c89f21f73 .
2a1fc8892 .
1258803c0 .
06e7b4c50 .
69f88f3d3 .
634ec5cb7 .
9f8bcec92 .
6a80064f7 .
c62788122 .
a6d3453ca .
e0ba6764e .
b2b2587f6 .
82030f386 .
60c8331bc .
92933de51 .
a021efcde .
def3d2053 .
c498c1d4a .
bc62b89bb .
8485f6964 .
3778d6470 .
6642c07af .
dbe72a293 .
48885df73 .
ac0890316 .
a1a0296e8 .
d7fa86a15 .
62d4b793d .
a154473a4 .
72d6622d2 .
4951ce53a .
4df351bda .
8488374fa .
6c5d95e91 .
bd5ad98b0 .
4baff4a38 .
011cf98e9 .
46f09676f .
f9fc7ec05 .
64214b216 .
2c6199e6c Optimize CImg<T>::_correlate().
1ae6b689a .
6c7dab3a6 .
463a7a9e9 .
7ab29098f .
128d06351 .
0fb83de04 .
2f91d0522 .
64ae3ee54 .
025e85ea5 .
c7ed44f42 .
91ef37e53 .
f92c0ead4 .
29066e1b0 .
00c8c6ba7 .
5a408e8cc .
87226897c .
44b78c7fb .
0bfb8739b Merge pull request #321 from Lucky-Na/master
f1996f10f delete -mtune option on loongarch architecture
3d72e8721 Fix variable prepending operator '..='
499719e16 .
30a5cd2a0 .
43a6228be .
6dabed31d .
4fca316ed correlate() : Fix when used with 3x3,5x5 or 3x3x3 kernels and dirichlet boundary conditions.
c72acfb3a cimg_math_parser() : Allow strings with blank characters to define empty 'begin[_t]()' and 'end[_t]()' blocs.
9423744d5 .
59ffa01f5 .
b1816a335 .
e29daa5b6 cimg_math_parser(): Fix argument counting in functions convolve()/correlate().
b9d347240 .
43af18673 .
a79cada5f .
0275b3d84 .
2b0af18cf .
bf67c30d8 .
6ca2fdcde .
e38d56a2f .
b14e79f6e Fix CImg<T>::convolve() and correlate() for channel_mode==0.
a996c28cf Fix CImg<T>::convolve() and correlate() for channel_mode==0.
63d40db5e CImg<T>::convolve()/correlate() : Fix bug with small kernels and channel_mode==2.
8b2e46ca5 .
d9e5e9551 _cimg_math_parser() : better manage inclusion of begin(), begin_t(), end() and end_t() blocs.
46f043f34 _cimg_math_parser() : allow begin(), begin_t(), end() and end_t() to have empty arguments, and fix possible bug with returned value when multiple end() separated by semicolons.
6fb8ca212 .
59464c694 _cimg_math_parsers(): Fix thread number when math expression is evaluated in parallel.
f8cc94faa .
7c414c67b .
7232ea760 .
9aaf75076 CImg<T>::cimg_math_parser() : Add predefined variable T (max number of threads).
ee59a3f87 .
f5ff164b6 Add commands 'deg2rad' and 'rad2deg'.
28b0562b6 Add 'erf' function.
f7308afab .
d984ca0ea .
96eab6c69 Auto-commit for release 2.9.8_pre
ae16ae5ef .
be4612f61 .
87e8f38b7 cimg_math_parser : Add postfix operator '°' for degree to radian conversion.
6351adce1 .
a68b594bd CImg<T>::_cimg_math_parser() : Add functions 'deg2rad()' and 'rad2deg()'.
a95d03e8b .
a285f0fca cimg_math_parser: Add function 'erfinv()' (Inverse of the gaussian error function).
948cc956c cimg_math_parser: Add function 'errf' (Gaussian error function).
340d0a4c8 .
55e370660 Fix #319
c00abf5f0 Command 'input' : when loading a tiff file, bit depth is now set to status.
7222933de Change 'bits_per_pixel' to 'bits_per_value' in CImg<T>::load_png().
16979f3b3 .
5876d4f7d .
0d9a3c56c .
33a28fddf Temporary disable openmp clauses that slow down execution of CImg<T>::draw_text().
efa524d6d .
b726708e6 Implementation of the operator$() in math parser.
5f4914222 Start support of '$varname' expressions in math parser.
ad7ea9ef1 Improve comments.
0d1e92f3f factorizes the use of 'is_varname()' in 'cimg_math_parser'.
3039446df .
2c5628639 Make function echo() of the math parser accepts no arguments.
0fa6b92a5 .
5f15b8c60 .
37559271f .
d079374d8 .
d7bd9f018 .
e68a184eb .
749bc70ab .
f4b53f6e5 .
cc3c1f1da .
14c95cc60 .
075a7225b .
dd8888fe6 Auto-commit for release 2.9.8_pre
b0f47208f .
68e98b6bf .
68dbb754b .
1a2ff4ed5 .
6c5f78646 .
1d51d0113 .
aa0eaa35c .
f6bf39296 .
771fed51f .
ae07e9402 .
c2ea55532 Simplify memtype values to avoid optimizations in mathparser.
b0bf3f942 Merge branch 'master' of github.com:dtschump/CImg
218efcf9b .
670c4b96b .
91c79ddbe .
b2364dfe6 .
70aaa01e7 .
2970997fc .
4d07ae7cc .
7c15e7916 .
8e381d9ef .
5bcba71c9 .
fde76337e .
7886267e6 .
979de2c2a .
f7d659758 .
30761a532 .
bb00749e6 .
317e5ac5c .
38b70c3cf .
009203b1f .
3ad6a9ae5 .
0794bbb21 .
03781c95a Fix bug in 'draw_text()' when background color provided.
09b9509ae .
b7cd009a5 .
65c6ddc16 .
29ab0faff .
db81f5dd3 .
3645f4fe1 .
8bdba276f .
f4138047f .
30f6b4b06 .
306e56fe6 .
9a1ba9432 .
515bd31a1 .
6ca343326 .
766163fb8 .
9a95c0580 Try to fix warning in _load_cimg().
c9ad21c03 .
a5a6d8145 .
11b76c6be .
acc89aa12 .
50830d050 .
79c98a562 .
4a7bb5179 .
c4b3fa7de .
227ac1511 .
96918daa6 .
32b165ef3 .
a66d1967a .
0b499d9ad Auto-commit for release 2.9.8_pre
f1f7eb052 .
0f67297eb .
a70a9fe8a Final release 2.9.7
f96abe1f9 .
bbc902b73 .
9aafe8661 .
6e2fe28f8 .
84999fc90 .
50010156f .
070ded77c .
b6b16a833 .
19cfa4a58 .
df9386eb1 .
6d2e1b033 .
54362bece .
6b6563f80 .
3aea1583d .
72aebaf5a Merge pull request #307 from lrusak/heic
94427018a .
9546e99a6 .
bd5588194 add heic and avif support via libheif
089aeaa1f .
54eb48990 .
1b0e54e4e .
7109b5f09 .
e8aed2a42 .
8174e8777 .
338f4b6c4 .
1838aef33 .
e48345ab6 .
f30d034a9 .
e15eac073 .
b2129184e .
d9ef878a2 .
5f4047615 .
d3eb0c5eb .
2f7a1ebf1 .
90baf1b6b .
e5084c208 .
391a440af .
70a4532a3 .
eca1daace .
9efa52eb7 .
0cdc54bcf .
a79a2f1c3 .
de1205f66 .
063d9e09a .
ec3f66877 .
324c7d1cc .
1244801b1 .
58196cec7 .
2363d1935 .
ccc362050 .
5c98c31b0 .
c6be2b83a .
8f79526f0 .
1ef7c78d7 .
f913ffa5e .
7db6d0835 Merge pull request #295 from cleeus/fix-pnm-heap-overflows
4f184f89f Fix multiple heap buffer overflows
580d74777 .
755cf717a .
ce329c07f .
33824c014 .
9978daaaf .
f37b255ca .
1222eea73 .
b8a7af571 Merge pull request #282 from Chuvi-w/FIX_VTK
96e5c9e14 Fix syntax error in vtk.h
ea2b86fef .
833b1a589 .
654d46278 .
15d25b190 .
d6955b5e9 .
3f2b7a3a7 .
612044515 .
6f3cacdc3 .
94f6b51e5 .
e0763f2fd .
8f0dcc789 .
d069d8048 .
d501aa3a0 .
9bcfc5b8c .
3a6cd9df0 .
46def454c Merge pull request #263 from UlysseV/MC_improvement
16f2496b6 change func call pattern for isoline3D
d577a6b28 change func call pattern
f71695057 .
fffee0ae0 .
c15123bff .
d0257a2f9 .
01edd73e1 .
bb02b35ea .
92b407d53 .
b26716f3b Merge branch 'master' of github.com:dtschump/CImg
bc2446460 .
a93c51b98 .
ecc8b7337 .
c3960f08f .
f77588f32 Merge pull request #253 from dtschump/develop

git-subtree-dir: external/CImg
git-subtree-split: 4d061dcd67c08e9a36a01875e78b53ee86501dd7
This commit is contained in:
Leon Styhre 2023-01-06 11:47:13 +01:00
parent 3b12410b91
commit 6c5f42416f
26 changed files with 5925 additions and 3591 deletions

37
.github/workflows/Test_Build.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: Build then test
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
build-on-ubuntu:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get install -y gcc g++ clang libpng-dev libjpeg-dev libmagick++-dev
sudo apt-get install -y libgraphicsmagick++-dev libfftw3-dev zlib1g-dev libheif-dev
- name: build
run: |
pushd examples
make clean
make mlinux
popd
build-on-macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
brew install libheif libpng fftw libjpeg gcc zlib imagemagick automake openexr llvm
- name: build
run: |
pushd examples
make clean
make mmacos
popd

9246
CImg.h

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,10 @@
<a href="http://cimg.eu">![Logo](http://cimg.eu/img/CImgLogo2.jpg)</a> <a href="http://cimg.eu">![Logo](http://cimg.eu/img/logo_header.jpg)</a>
##### http://cimg.eu ##### http://cimg.eu
------------------ ------------------
![Build](https://github.com/GreycLab/CImg/workflows/Build%20then%20test/badge.svg)
The **CImg Library** is a **small** and **open-source** **C++ toolkit** for **image processing**, designed with these properties in mind: ------------------
The **CImg Library** is a **small** and **open-source** **C++ library** for **image processing**, designed with these properties in mind:
![Usefulness](http://cimg.eu/img/item_usefulness.jpg) **CImg** defines *classes* and *methods* to manage images in your own C++ code. You can use **CImg** to load/save various file formats, access pixel values, display/transform/filter images, draw primitives (text, faces, curves, 3d objects, ...), compute statistics, manage user interactions on images, and so on... ![Usefulness](http://cimg.eu/img/item_usefulness.jpg) **CImg** defines *classes* and *methods* to manage images in your own C++ code. You can use **CImg** to load/save various file formats, access pixel values, display/transform/filter images, draw primitives (text, faces, curves, 3d objects, ...), compute statistics, manage user interactions on images, and so on...
@ -11,7 +12,7 @@ The **CImg Library** is a **small** and **open-source** **C++ toolkit** for **im
![Portability](http://cimg.eu/img/item_portability.jpg) **CImg** is *self-contained*, *thread-safe* and *highly portable*. It fully works on *different operating systems* (`Unix,Windows,MacOS X,*BSD,...`) and is compatible with *various C++ compilers* (`Visual C++,g++,clang++,icc,...`). ![Portability](http://cimg.eu/img/item_portability.jpg) **CImg** is *self-contained*, *thread-safe* and *highly portable*. It fully works on *different operating systems* (`Unix,Windows,MacOS X,*BSD,...`) and is compatible with *various C++ compilers* (`Visual C++,g++,clang++,icc,...`).
![Simplicity](http://cimg.eu/img/item_simplicity.jpg) **CImg** is *lightweight*. It is made of a single header file [`CImg.h`](https://github.com/dtschump/CImg/raw/master/CImg.h) that must be included in your C++ source. It defines only *four* different classes, encapsulated in the namespace `cimg_library`. It can be compiled using a minimal set of standard C++ and system libraries only. *No need for exotic or complex dependencies*. ![Simplicity](http://cimg.eu/img/item_simplicity.jpg) **CImg** is *lightweight*. It is made of a single header file [`CImg.h`](https://github.com/GreycLab/CImg/raw/master/CImg.h) that must be included in your C++ source. It defines only *four* different classes, encapsulated in the namespace `cimg_library`. It can be compiled using a minimal set of standard C++ and system libraries only. *No need for exotic or complex dependencies*.
![Extensibility](http://cimg.eu/img/item_extensibility.jpg) Although not mandatory, **CImg** can use functionalities of external tools/libraries such as [Board](http://libboard.sourceforge.net/), [FFMPEG](http://ffmpeg.mplayerhq.hu/), [FFTW3](http://www.fftw.org/), [GraphicsMagick](http://www.graphicsmagick.org/), [ImageMagick](http://www.imagemagick.org/), [Lapack](http://www.netlib.org/lapack/), [libcurl](http://curl.haxx.se/libcurl/), [libjpeg](http://www.ijg.org/), [libpng](http://www.libpng.org/pub/png/libpng.html), [libtiff](http://www.libtiff.org/), [Magick++](http://www.imagemagick.org/Magick++/), [OpenEXR](http://www.openexr.com/), [OpenCV](http://http://opencv.willowgarage.com/wiki/), [OpenMP](http://www.openmp.org/) or [XMedCon](http://xmedcon.sourceforge.net/). Moreover, a simple *plug-in* mechanism allows any user to directly enhance the library capabilities according to their needs. ![Extensibility](http://cimg.eu/img/item_extensibility.jpg) Although not mandatory, **CImg** can use functionalities of external tools/libraries such as [Board](http://libboard.sourceforge.net/), [FFMPEG](http://ffmpeg.mplayerhq.hu/), [FFTW3](http://www.fftw.org/), [GraphicsMagick](http://www.graphicsmagick.org/), [ImageMagick](http://www.imagemagick.org/), [Lapack](http://www.netlib.org/lapack/), [libcurl](http://curl.haxx.se/libcurl/), [libjpeg](http://www.ijg.org/), [libpng](http://www.libpng.org/pub/png/libpng.html), [libtiff](http://www.libtiff.org/), [Magick++](http://www.imagemagick.org/Magick++/), [OpenEXR](http://www.openexr.com/), [OpenCV](http://http://opencv.willowgarage.com/wiki/), [OpenMP](http://www.openmp.org/) or [XMedCon](http://xmedcon.sourceforge.net/). Moreover, a simple *plug-in* mechanism allows any user to directly enhance the library capabilities according to their needs.

View file

@ -106,6 +106,9 @@ SET(CIMG_MAGICK_CCFLAGS -Dcimg_use_magick)
# ( http://www.fftw.org/ ) # ( http://www.fftw.org/ )
SET(CIMG_FFTW3_CCFLAGS -Dcimg_use_fftw3) SET(CIMG_FFTW3_CCFLAGS -Dcimg_use_fftw3)
# Flags to enable native support for HEIC image files, using libheif.
# ( https://github.com/strukturag/libheif )
SET(CIMG_HEIC_CCFLAGS -Dcimg_use_heic)
@ -118,6 +121,22 @@ FIND_PACKAGE(ZLIB)
FIND_PACKAGE(LAPACK) FIND_PACKAGE(LAPACK)
FIND_PACKAGE(BLAS) FIND_PACKAGE(BLAS)
if(PKG_CONFIG_FOUND)
pkg_check_modules(PC_HEIF libheif QUIET)
endif()
find_path(HEIF_INCLUDE_DIR NAMES libheif/heif_cxx.h
PATHS ${PC_HEIF_INCLUDEDIR})
find_library(HEIF_LIBRARY NAMES heif libheif
PATHS ${PC_HEIF_LIBDIR})
set(HEIF_VERSION ${PC_HEIF_VERSION})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(HEIF
REQUIRED_VARS HEIF_LIBRARY HEIF_INCLUDE_DIR
VERSION_VAR HEIF_VERSION)
PKG_CHECK_MODULES(FFTW3 fftw3) PKG_CHECK_MODULES(FFTW3 fftw3)
PKG_CHECK_MODULES(OPENEXR OpenEXR) PKG_CHECK_MODULES(OPENEXR OpenEXR)
PKG_CHECK_MODULES(MAGICK Magick++) PKG_CHECK_MODULES(MAGICK Magick++)
@ -200,7 +219,13 @@ if(MAGICK_FOUND)
SET( SYSTEM_LIBS ${SYSTEM_LIBS} ${MAGICK_LIBRARIES} ) SET( SYSTEM_LIBS ${SYSTEM_LIBS} ${MAGICK_LIBRARIES} )
endif() endif()
if(HEIF_FOUND)
get_filename_component(HEIF_LIB_DIRS ${HEIF_LIBRARY} PATH)
SET(CIMG_CFLAGS "${CIMG_CFLAGS} ${CIMG_HEIC_CCFLAGS}")
link_directories( ${HEIF_LIB_DIRS} )
include_directories( ${HEIF_INCLUDE_DIRS} )
SET( SYSTEM_LIBS ${SYSTEM_LIBS} ${HEIF_LIBRARY} )
endif()
if( LIBAVCODEC_FOUND AND LIBAVFORMAT_FOUND AND LIBSWSCALE_FOUND AND LIBAVUTIL_FOUND ) if( LIBAVCODEC_FOUND AND LIBAVFORMAT_FOUND AND LIBSWSCALE_FOUND AND LIBAVUTIL_FOUND )

View file

@ -153,7 +153,11 @@ VT100_CFLAGS = -Dcimg_use_vt100
# Flags to enable code optimization by the compiler. # Flags to enable code optimization by the compiler.
OPT_CFLAGS = -Ofast OPT_CFLAGS = -Ofast
ifdef IS_GCC ifdef IS_GCC
OPT_CFLAGS = -Ofast -mtune=generic # Add -mtune=generic for GCC if supported.
NO_MTUNE_GENERIC = $(shell $(CXX) -mtune=generic -E - < /dev/null > /dev/null 2>&1; echo $$?)
ifeq ($(NO_MTUNE_GENERIC),0)
OPT_CFLAGS += -mtune=generic
endif
endif endif
ifdef IS_ICPC ifdef IS_ICPC
OPT_CFLAGS = -fast OPT_CFLAGS = -fast

View file

@ -99,6 +99,7 @@ int main(int argc, char **argv) {
CImg<unsigned char> board, previous_board, selected_board, shape, img(background); CImg<unsigned char> board, previous_board, selected_board, shape, img(background);
CImgDisplay disp(img.width(),img.height(),"Jawbreaker",0); CImgDisplay disp(img.width(),img.height(),"Jawbreaker",0);
bool redraw = true, gameover = false, title = true; bool redraw = true, gameover = false, title = true;
for (float opac = 0.0f; !disp.is_closed(); ) { for (float opac = 0.0f; !disp.is_closed(); ) {
// Init board // Init board
@ -113,10 +114,12 @@ int main(int argc, char **argv) {
if (redraw) { if (redraw) {
(img=background).draw_text(2,2,"Score : %u",yellow,0,0.7f,24,score). (img=background).draw_text(2,2,"Score : %u",yellow,0,0.7f,24,score).
draw_text(Wi - 90,2,"Best : %u",orange,0,0.9f,17,best_score); draw_text(Wi - 90,2,"Best : %u",orange,0,0.9f,17,best_score);
if (selected_board) { if (selected_board) {
cimg_forXY(selected_board,x,y) if (selected_board(x,y)) cimg_forXY(selected_board,x,y) if (selected_board(x,y))
img.draw_image(x<<5,y<<5,balls[selected_board(x,y)],mask); img.draw_image(x<<5,y<<5,balls[selected_board(x,y)],mask);
} else cimg_forXY(board,x,y) if (board(x,y)) img.draw_image(x<<5,y<<5,balls[board(x,y)],mask); } else cimg_forXY(board,x,y) if (board(x,y)) img.draw_image(x<<5,y<<5,balls[board(x,y)],mask);
if (title) { if (title) {
CImg<unsigned char> text1, text2; CImg<unsigned char> text1, text2;
text1.draw_text(0,0,"- Jawbreaker -",white,0,1,48).resize(-100,-100,1,3); text1.draw_text(0,0,"- Jawbreaker -",white,0,1,48).resize(-100,-100,1,3);

View file

@ -136,7 +136,7 @@
The CImg library is a very light and user-friendly library : only standard system libraries are used. The CImg library is a very light and user-friendly library : only standard system libraries are used.
It avoids handling complex dependencies and problems with library compatibility. It avoids handling complex dependencies and problems with library compatibility.
The only thing you need is a (quite modern) C++ compiler : The only thing you need is a C++ compiler :
- <b>Microsoft Visual Studio.NET and Visual Express Edition</b> : Use the project files and solution files provided in the - <b>Microsoft Visual Studio.NET and Visual Express Edition</b> : Use the project files and solution files provided in the
%CImg Library package (directory 'compilation/') to see how it works. %CImg Library package (directory 'compilation/') to see how it works.
@ -163,7 +163,7 @@
- <b>Dev-Cpp</b> : Use the project file provided in the CImg library package to see how it works. - <b>Dev-Cpp</b> : Use the project file provided in the CImg library package to see how it works.
If you are using other compilers and encounter problems, please If you are using other compilers and encounter problems, please
<a href="https://github.com/dtschump/CImg/issues">write me</a> since maintaining compatibility is one <a href="https://github.com/GreycLab/CImg/issues">write me</a> since maintaining compatibility is one
of the priorities of the %CImg Library. Nevertheless, old compilers that do not respect the C++ standard will not of the priorities of the %CImg Library. Nevertheless, old compilers that do not respect the C++ standard will not
support the %CImg Library. support the %CImg Library.
@ -208,10 +208,10 @@
\subsection ssf11 1.1. What is the CImg Library ? \subsection ssf11 1.1. What is the CImg Library ?
The CImg Library is an <i>open-source C++ toolkit for image processing</i>.\n The CImg Library is an <i>open-source C++ library for image processing</i>.\n
It mainly consists in a (big) single header file It mainly consists in a (big) single header file
<a href="https://github.com/dtschump/CImg/raw/master/CImg.h">CImg.h</a> <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h">CImg.h</a>
providing a set of C++ classes and functions that can be used in your own sources, providing a set of C++ classes and functions that can be used in your own sources,
to load/save, manage/process and display generic images. to load/save, manage/process and display generic images.
It's actually a very simple and pleasant toolkit for coding image processing stuff in C++ : It's actually a very simple and pleasant toolkit for coding image processing stuff in C++ :
@ -237,10 +237,10 @@
The package is distributed under the <a href="http://www.cecill.info">CeCILL license</a>. The package is distributed under the <a href="http://www.cecill.info">CeCILL license</a>.
This package contains : This package contains :
- The main library file <a href="https://github.com/dtschump/CImg/raw/master/CImg.h">CImg.h</a> (C++ header file). - The main library file <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h">CImg.h</a> (C++ header file).
- Several C++ source code showing <a href="https://github.com/dtschump/CImg/tree/master/examples">examples of using CImg</a>. - Several C++ source code showing <a href="https://github.com/GreycLab/CImg/tree/master/examples">examples of using CImg</a>.
- A complete library documentation, in <a href="../CImg_reference.pdf">PDF</a> format. - A complete library documentation, in <a href="../CImg_reference.pdf">PDF</a> format.
- Additional <a href="https://github.com/dtschump/CImg/tree/master/plugins">library plug-ins</a> that can be used to extend - Additional <a href="https://github.com/GreycLab/CImg/tree/master/plugins">library plug-ins</a> that can be used to extend
library capabilities for specific uses. library capabilities for specific uses.
The CImg Library is a quite lightweight library which is easy to maintain (due to its particular structure), and thus The CImg Library is a quite lightweight library which is easy to maintain (due to its particular structure), and thus
@ -266,10 +266,10 @@
corresponding to different constraints on the source files : corresponding to different constraints on the source files :
- The <a href="http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html">CeCILL-C</a> license is the most permissive one, close to - The <a href="http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html">CeCILL-C</a> license is the most permissive one, close to
the <i>GNU LGPL license</i>, and <i>applies <b>only</b> on the main library file the <i>GNU LGPL license</i>, and <i>applies <b>only</b> on the main library file
<a href="https://github.com/dtschump/CImg/raw/master/CImg.h">CImg.h</a></i>. <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h">CImg.h</a></i>.
Basically, this license allows to use <a href="https://github.com/dtschump/CImg/raw/master/CImg.h">CImg.h</a> Basically, this license allows to use <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h">CImg.h</a>
in a closed-source product without forcing you to redistribute the entire software source code. Anyway, in a closed-source product without forcing you to redistribute the entire software source code. Anyway,
if one modifies the <a href="https://github.com/dtschump/CImg/raw/master/CImg.h">CImg.h</a> source file, one has to redistribute if one modifies the <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h">CImg.h</a> source file, one has to redistribute
the modified version of the file that must be governed by the same <a href="http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html">CeCILL-C</a> license. the modified version of the file that must be governed by the same <a href="http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html">CeCILL-C</a> license.
- The <a href="http://www.cecill.info/licences/Licence_CeCILL_V2-en.html">CeCILL</a> license applies to all other files - The <a href="http://www.cecill.info/licences/Licence_CeCILL_V2-en.html">CeCILL</a> license applies to all other files
@ -314,7 +314,7 @@
\subsection ssf23 2.3 Why is CImg entirely contained in a single header file ? \subsection ssf23 2.3 Why is CImg entirely contained in a single header file ?
People are often surprised to see that the complete code of the library is contained in a single (big) C++ header file People are often surprised to see that the complete code of the library is contained in a single (big) C++ header file
<a href="https://github.com/dtschump/CImg/raw/master/CImg.h">CImg.h</a>. <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h">CImg.h</a>.
There are good practical and technical reasons to do that. Some arguments are listed below to justify this approach, There are good practical and technical reasons to do that. Some arguments are listed below to justify this approach,
so (I hope) you won't think this is a awkwardly C++ design of the CImg library :\n so (I hope) you won't think this is a awkwardly C++ design of the CImg library :\n

View file

@ -40,7 +40,7 @@
It contains all the required files, as well as various examples (which must be compiled), It contains all the required files, as well as various examples (which must be compiled),
illustrating the use of the library functions and classes.<br/> illustrating the use of the library functions and classes.<br/>
</td></tr> </td></tr>
<tr><td><a href="https://github.com/dtschump/CImg"> <tr><td><a href="https://github.com/GreycLab/CImg">
<img src="img/item_sources.jpg" alt="Sources Repository" <img src="img/item_sources.jpg" alt="Sources Repository"
onmouseover="this.src='img/item_sources2.jpg';" onmouseover="this.src='img/item_sources2.jpg';"
onmouseout="this.src='img/item_sources.jpg';" /></a></td> onmouseout="this.src='img/item_sources.jpg';" /></a></td>
@ -50,7 +50,7 @@
updates as well. To do this, just updates as well. To do this, just
type the command : type the command :
<div class="gmd_code"> <div class="gmd_code">
<a href="https://github.com/dtschump/CImg">git clone --depth=1 https://github.com/dtschump/CImg.git</a> <a href="https://github.com/GreycLab/CImg">git clone --depth=1 https://github.com/GreycLab/CImg.git</a>
</div> </div>
in your favorite console. Nevertheless, you have to know that some code in the source repository in your favorite console. Nevertheless, you have to know that some code in the source repository
is under development and may be experimental, so always test the latest stable archive before complaining ! is under development and may be experimental, so always test the latest stable archive before complaining !

View file

@ -23,7 +23,7 @@
<div class="header"> <div class="header">
<a href="index.html"><img alt="Logo" src="img/logo_header.jpg" class="center_image" style="margin-top:1em;"/></a> <a href="index.html"><img alt="Logo" src="img/logo_header.jpg" class="center_image" style="margin-top:1em;"/></a>
<h2 style="padding-bottom: 1em"> <h2 style="padding-bottom: 1em">
Latest stable version: <b><a href="http://cimg.eu/files/CImg_2.9.6.zip">2.9.6</a></b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Current pre-release: <b><a href="http://cimg.eu/files/CImg_latest.zip">2.9.7</a></b> Latest stable version: <b><a href="http://cimg.eu/files/CImg_3.1.6.zip">3.1.6</a></b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Current pre-release: <b><a href="http://cimg.eu/files/CImg_latest.zip">3.2.0</a></b>
</h2> </h2>
<hr/> <hr/>
@ -49,7 +49,7 @@
<li><a href='reference/'><span> <li><a href='reference/'><span>
<img alt="Documentation" src='img/menu_reference.png' />&nbsp;&nbsp; <img alt="Documentation" src='img/menu_reference.png' />&nbsp;&nbsp;
Documentation</span></a></li> Documentation</span></a></li>
<li><a href='https://github.com/dtschump/CImg/issues'><span> <li><a href='https://github.com/GreycLab/CImg/issues'><span>
<img alt="Report Issue" src='img/menu_issue.png' />&nbsp;&nbsp; <img alt="Report Issue" src='img/menu_issue.png' />&nbsp;&nbsp;
Report Issue</span></a> Report Issue</span></a>
<li><a href='links.html'><span> <li><a href='links.html'><span>

View file

@ -26,7 +26,7 @@
<div class="header"> <div class="header">
<a href="../index.html"><img alt="Logo" src="../img/logo_header.jpg" class="center_image" style="margin-top:1em;"/></a> <a href="../index.html"><img alt="Logo" src="../img/logo_header.jpg" class="center_image" style="margin-top:1em;"/></a>
<h2 style="padding-bottom: 1em"> <h2 style="padding-bottom: 1em">
Latest stable version: <b><a href="http://cimg.eu/files/CImg_2.9.6.zip">2.9.6</a></b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Current pre-release: <b><a href="http://cimg.eu/files/CImg_latest.zip">2.9.7</a></b> Latest stable version: <b><a href="http://cimg.eu/files/CImg_3.1.6.zip">3.1.6</a></b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Current pre-release: <b><a href="http://cimg.eu/files/CImg_latest.zip">3.2.0</a></b>
</h2> </h2>
<hr/> <hr/>
@ -52,7 +52,7 @@
<li><a href='../reference/'><span> <li><a href='../reference/'><span>
<img alt="Documentation" src='../img/menu_reference.png' />&nbsp;&nbsp; <img alt="Documentation" src='../img/menu_reference.png' />&nbsp;&nbsp;
Documentation</span></a></li> Documentation</span></a></li>
<li><a href='https://github.com/dtschump/CImg/issues'><span> <li><a href='https://github.com/GreycLab/CImg/issues'><span>
<img alt="Report Issue" src='../img/menu_issue.png' />&nbsp;&nbsp; <img alt="Report Issue" src='../img/menu_issue.png' />&nbsp;&nbsp;
Report Issue</span></a> Report Issue</span></a>
<li><a href='../links.html'><span> <li><a href='../links.html'><span>

BIN
html/img/logoCImg0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 44 KiB

BIN
html/img/logo_header.xcf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

BIN
html/img/postcard75.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

BIN
html/img/postcard76.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

BIN
html/img/postcard77.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
html/img/postcard78.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

BIN
html/img/postcard79.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
html/img/postcard80.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -4,7 +4,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="highslide/highslide.css"/> <link rel="stylesheet" href="highslide/highslide.css"/>
<title>The CImg Library - C++ Template Image Processing Toolkit</title> <title>The CImg Library - C++ Template Image Processing Library</title>
<script src="jquery-3.5.1.min.js"></script> <script src="jquery-3.5.1.min.js"></script>
<script>var jQuery_3_5_1 = $.noConflict(true);</script> <script>var jQuery_3_5_1 = $.noConflict(true);</script>
<script>jQuery_3_5_1(function(){ jQuery_3_5_1("#include_header").load("header.html"); });</script> <script>jQuery_3_5_1(function(){ jQuery_3_5_1("#include_header").load("header.html"); });</script>
@ -30,7 +30,7 @@
<p> <p>
The <span class="gmd_cimg"></span> Library is a <b>small</b> and <b>open-source</b> The <span class="gmd_cimg"></span> Library is a <b>small</b> and <b>open-source</b>
<b>C++ toolkit</b> for <b>image processing</b>, <b>C++ library</b> for <b>image processing</b>,
designed with these properties in mind : designed with these properties in mind :
</p> </p>
@ -59,7 +59,7 @@
<tr><td><img src="img/item_simplicity.jpg" alt="Simplicity"/></td> <tr><td><img src="img/item_simplicity.jpg" alt="Simplicity"/></td>
<td><hr/> <td><hr/>
<span class="gmd_cimg"></span> is <i>lightweight</i>. It is made of a single header file <span class="gmd_cimg"></span> is <i>lightweight</i>. It is made of a single header file
<a href="https://github.com/dtschump/CImg/raw/master/CImg.h"><span class="gmd_monobold">CImg.h</span></a> <a href="https://github.com/GreycLab/CImg/raw/master/CImg.h"><span class="gmd_monobold">CImg.h</span></a>
that must be included in your C++ source. It defines only <i>four</i> different classes, encapsulated that must be included in your C++ source. It defines only <i>four</i> different classes, encapsulated
in the namespace <span class="gmd_mono">cimg_library</span>. in the namespace <span class="gmd_mono">cimg_library</span>.
It can be compiled using a minimal set of standard C++ and system libraries only.<br/> It can be compiled using a minimal set of standard C++ and system libraries only.<br/>
@ -291,7 +291,7 @@
<a href="CImg_flyer.pdf">CImg Flyer</a> at work, in your lab or school <a href="CImg_flyer.pdf">CImg Flyer</a> at work, in your lab or school
(available in <a href="CImg_flyer.pdf">.PDF</a> or <a href="img/CImg_flyer.jpg">.JPEG</a> formats).</li> (available in <a href="CImg_flyer.pdf">.PDF</a> or <a href="img/CImg_flyer.jpg">.JPEG</a> formats).</li>
<li>You can report bugs, propose patches or new functionalities, using the <span class="gmd_cimg"></span> <li>You can report bugs, propose patches or new functionalities, using the <span class="gmd_cimg"></span>
<a href="https://github.com/dtschump/CImg/issues">forum</a>.</li> <a href="https://github.com/GreycLab/CImg/issues">forum</a>.</li>
<li>You can write <li>You can write
<a href="reference/group__cimg__tutorial.html">tutorials</a> <a href="reference/group__cimg__tutorial.html">tutorials</a>
or parts of the <a href="reference/index.html">documentation</a>.</li> or parts of the <a href="reference/index.html">documentation</a>.</li>
@ -437,13 +437,28 @@
<li><a href="img/postcard69.jpg" class="highslide" onclick="return hs.expand(this)"> <li><a href="img/postcard69.jpg" class="highslide" onclick="return hs.expand(this)">
Pregonda / Menorca, from Josep Febrer.</a></li> Pregonda / Menorca, from Josep Febrer.</a></li>
<li><a href="img/postcard70.jpg" class="highslide" onclick="return hs.expand(this)"> <li><a href="img/postcard70.jpg" class="highslide" onclick="return hs.expand(this)">
USA, from Patrick Wanters.</a></li> USA, from Patrick Wauters.</a></li>
<li><a href="img/postcard71.jpg" class="highslide" onclick="return hs.expand(this)"> <li><a href="img/postcard71.jpg" class="highslide" onclick="return hs.expand(this)">
Toulon/France, from Cyril Prissette.</a></li> Toulon/France, from Cyril Prissette.</a></li>
<li><a href="img/postcard72.jpg" class="highslide" onclick="return hs.expand(this)"> <li><a href="img/postcard72.jpg" class="highslide" onclick="return hs.expand(this)">
Bochum/Germany, from Andreas Weissenburger.</a></li> Bochum/Germany, from Andreas Weissenburger.</a></li>
<li><a href="img/postcard73.jpg" class="highslide" onclick="return hs.expand(this)"> <li><a href="img/postcard73.jpg" class="highslide" onclick="return hs.expand(this)">
Portsmouth/USA, from Benjamin Russell.</a></li> Portsmouth/USA, from Benjamin Russell.</a></li>
<li><a href="img/postcard74.jpg" class="highslide" onclick="return hs.expand(this)">
Angers/France, from Bruno Bianchi.</a></li>
<li><a href="img/postcard75.jpg" class="highslide" onclick="return hs.expand(this)">
Makuhari/Japan, from Hiroyuki Hayashi.</a></li>
<li><a href="img/postcard76.jpg" class="highslide" onclick="return hs.expand(this)">
Tristan Da Cunha, from Richard Lockwood.</a></li>
<li><a href="img/postcard77.jpg" class="highslide" onclick="return hs.expand(this)">
Tyrol/Austria, from Marcel.</a></li>
<li><a href="img/postcard78.jpg" class="highslide" onclick="return hs.expand(this)">
Heidelberg/Germany, from Markus.</a></li>
<li><a href="img/postcard79.jpg" class="highslide" onclick="return hs.expand(this)">
Jokulsarlon Lagoonl/Iceland, from Patrick Wauters.</a></li>
<li><a href="img/postcard80.jpg" class="highslide" onclick="return hs.expand(this)">
Argentina, from Amyspark.</a></li>
</ul></li> </ul></li>
</ul> </ul>

View file

@ -50,7 +50,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>The main demo sample of the <span class="gmd_cimg"></span> package</b> (1433 lines of code).<br/> <b>The main demo sample of the <span class="gmd_cimg"></span> package</b> (1433 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
Contains 26 different real-time animations, as well as a nice selection menu. Contains 26 different real-time animations, as well as a nice selection menu.
</p> </p>
@ -70,7 +70,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A 2d bump-mapping effect</b> (30 lines of code).<br/> <b>A 2d bump-mapping effect</b> (30 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p>You can move the light source using the mouse. <p>You can move the light source using the mouse.
This sample shows how to handle mouse motion and create an animation in a window. This sample shows how to handle mouse motion and create an animation in a window.
It demonstrates also that the <span class="gmd_cimg"></span> Library is quite fast ! It demonstrates also that the <span class="gmd_cimg"></span> Library is quite fast !
@ -92,7 +92,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>Computation of the Hough Transform</b> (95 lines of code).<br/> <b>Computation of the Hough Transform</b> (95 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/hough_transform2d.cpp"><span class="gmd_monobold">hough_transform.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/hough_transform2d.cpp"><span class="gmd_monobold">hough_transform.cpp</span></a>
<p> <p>
Illustrate the computation of the Hough transform to detect lines in 2D images. Provide also simple user Illustrate the computation of the Hough transform to detect lines in 2D images. Provide also simple user
interface to select and display lines. interface to select and display lines.
@ -108,7 +108,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>Do a fading between two images</b> (35 lines of code).<br/> <b>Do a fading between two images</b> (35 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/fade_images.cpp"><span class="gmd_monobold">fade_images.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/fade_images.cpp"><span class="gmd_monobold">fade_images.cpp</span></a>
<p> <p>
Very small code to perform a funny effect. Also demonstrate how to easily deal with command line arguments. Very small code to perform a funny effect. Also demonstrate how to easily deal with command line arguments.
</p> </p>
@ -123,7 +123,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A functional Mandelbrot fractal explorer</b> (51 lines of code).<br/> <b>A functional Mandelbrot fractal explorer</b> (51 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
Show how to use the predefined feature selection function present in the <span class="gmd_cimg"></span> Library. Show how to use the predefined feature selection function present in the <span class="gmd_cimg"></span> Library.
</p> </p>
@ -141,7 +141,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A simple shoot-em-up game, featuring the people of the Robotvis/Odyssee Lab</b> (180 lines of code).<br/> <b>A simple shoot-em-up game, featuring the people of the Robotvis/Odyssee Lab</b> (180 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/odykill.cpp"><span class="gmd_monobold">odykill.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/odykill.cpp"><span class="gmd_monobold">odykill.cpp</span></a>
<p> <p>
Another demonstration of handling mouse and creating animation for pedagogic purposes. Another demonstration of handling mouse and creating animation for pedagogic purposes.
</p> </p>
@ -157,7 +157,7 @@
<b>An implementation of an image registration algorithm, with <b>An implementation of an image registration algorithm, with
multiscale capability</b> (201 lines of code).<br/> multiscale capability</b> (201 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/image_registration.cpp"><span class="gmd_monobold">image_registration.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/image_registration.cpp"><span class="gmd_monobold">image_registration.cpp</span></a>
<p> <p>
Compute a motion map between two images, and warp one into the another through a smooth animation. Compute a motion map between two images, and warp one into the another through a smooth animation.
</p> </p>
@ -172,7 +172,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A mini-painting program</b> (30 lines of code).<br/> <b>A mini-painting program</b> (30 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
This is not a replacement to Photoshop, but it already includes a filling algorithm This is not a replacement to Photoshop, but it already includes a filling algorithm
as well as a color selection tool. as well as a color selection tool.
@ -191,7 +191,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A classical demomaking-effect, called 'rotozoom'</b> (20 lines of code).<br/> <b>A classical demomaking-effect, called 'rotozoom'</b> (20 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
Smell the old school parfume of the atari/amiga demos. Smell the old school parfume of the atari/amiga demos.
</p> </p>
@ -206,7 +206,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>An animation featuring triangles that are rotating</b> (50 lines of code).<br/> <b>An animation featuring triangles that are rotating</b> (50 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
Could be a replacement to your classical screen saver. Could be a replacement to your classical screen saver.
</p> </p>
@ -221,7 +221,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A demo of image filtering in the Fourier Domain</b> (30 lines of code).<br/> <b>A demo of image filtering in the Fourier Domain</b> (30 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=op0XoVMEdpE" target="_blank"> <a href="https://www.youtube.com/watch?v=op0XoVMEdpE" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -237,7 +237,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>An example of real-time 3D rendering</b>.<br/> <b>An example of real-time 3D rendering</b>.<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
No use of OpenGL or VTK in this example, only pure <span class="gmd_cimg"></span> software functions are used ! No use of OpenGL or VTK in this example, only pure <span class="gmd_cimg"></span> software functions are used !
</p> </p>
@ -255,7 +255,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>An example of the ellipse drawing function, used to bounce an elastic bubble</b> (25 lines of code).<br/> <b>An example of the ellipse drawing function, used to bounce an elastic bubble</b> (25 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=oXK6Wc4vsbE" target="_blank"> <a href="https://www.youtube.com/watch?v=oXK6Wc4vsbE" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -271,7 +271,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A real-time 3D virtual landscape</b> (40 lines of code).<br/> <b>A real-time 3D virtual landscape</b> (40 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<p> <p>
The altitude map is based on a 'fractal plasma' generator. The altitude map is based on a 'fractal plasma' generator.
</p> </p>
@ -289,7 +289,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A nice plasma effect with a sinus scroller</b> (70 lines of code).<br/> <b>A nice plasma effect with a sinus scroller</b> (70 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=na8hcayKbFo" target="_blank"> <a href="https://www.youtube.com/watch?v=na8hcayKbFo" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -305,7 +305,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>An implementation of the well known Tetris game</b> (130 lines of code).<br/> <b>An implementation of the well known Tetris game</b> (130 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/tetris.cpp"><span class="gmd_monobold">tetris.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/tetris.cpp"><span class="gmd_monobold">tetris.cpp</span></a>
<p> <p>
Very small code for a complete version of the Tetris game. Very small code for a complete version of the Tetris game.
</p> </p>
@ -323,7 +323,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>The implementation of the Tschumperlé-Deriche algorithm for image restoration and inpainting</b> (170 lines of code).<br/> <b>The implementation of the Tschumperlé-Deriche algorithm for image restoration and inpainting</b> (170 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/pde_TschumperleDeriche2d.cpp"><span class="gmd_monobold">pde_TschumperleDeriche2d.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/pde_TschumperleDeriche2d.cpp"><span class="gmd_monobold">pde_TschumperleDeriche2d.cpp</span></a>
<p> <p>
See <a href="ftp://ftp-sop.inria.fr/odyssee/Publications/2003/tschumperle-deriche:03.pdf">the corresponding publication</a> See <a href="ftp://ftp-sop.inria.fr/odyssee/Publications/2003/tschumperle-deriche:03.pdf">the corresponding publication</a>
for more detail on the algorithm. for more detail on the algorithm.
@ -339,7 +339,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A very smart and classical demo effect called 'Shade bobs'</b> (60 lines of code).<br/> <b>A very smart and classical demo effect called 'Shade bobs'</b> (60 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=q91cyn6x8LY" target="_blank"> <a href="https://www.youtube.com/watch?v=q91cyn6x8LY" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -355,7 +355,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A nice Blob Editor in only few lines</b> (90 lines of code).<br/> <b>A nice Blob Editor in only few lines</b> (90 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=wOCdcFfz7Z4" target="_blank"> <a href="https://www.youtube.com/watch?v=wOCdcFfz7Z4" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -371,7 +371,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>3d Metaballs animation</b> (23 lines of code).<br/> <b>3d Metaballs animation</b> (23 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=-S_r76OxzyY" target="_blank"> <a href="https://www.youtube.com/watch?v=-S_r76OxzyY" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -387,7 +387,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A tool to visualize images as surfaces in 3d</b> (100 lines of code).<br/> <b>A tool to visualize images as surfaces in 3d</b> (100 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/image_surface.cpp"><span class="gmd_monobold">image_surface.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/image_surface.cpp"><span class="gmd_monobold">image_surface.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=OlBXh-gkv3U" target="_blank"> <a href="https://www.youtube.com/watch?v=OlBXh-gkv3U" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -403,7 +403,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A 3d viewer for Diffusion tensor imaging datasets</b> (526 lines of code).<br/> <b>A 3d viewer for Diffusion tensor imaging datasets</b> (526 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/dtmri_view.cpp"><span class="gmd_monobold">dtmri_view.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/dtmri_view.cpp"><span class="gmd_monobold">dtmri_view.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=ip2itUXhcls" target="_blank"> <a href="https://www.youtube.com/watch?v=ip2itUXhcls" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -419,7 +419,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>Applying the wave equation on an 3d image-mapped surface</b> (55 lines of code).<br/> <b>Applying the wave equation on an 3d image-mapped surface</b> (55 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=KNe-rXJldDM" target="_blank"> <a href="https://www.youtube.com/watch?v=KNe-rXJldDM" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -435,7 +435,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A simple 2d curve editor using spline interpolation</b> (300 lines of code).<br/> <b>A simple 2d curve editor using spline interpolation</b> (300 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/curve_editor.cpp"><span class="gmd_monobold">curve_editor.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/curve_editor.cpp"><span class="gmd_monobold">curve_editor.cpp</span></a>
</td> </td>
</tr></table> </tr></table>
@ -447,7 +447,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A complete and funny game featuring colored balls</b> (121 lines of code).<br/> <b>A complete and funny game featuring colored balls</b> (121 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/jawbreaker.cpp"><span class="gmd_monobold">jawbreaker.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/jawbreaker.cpp"><span class="gmd_monobold">jawbreaker.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=3z4jdb-wafs" target="_blank"> <a href="https://www.youtube.com/watch?v=3z4jdb-wafs" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -463,7 +463,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A cool 3d reflection effect, using some <span class="gmd_cimg"></span> 3d object rendering tricks</b> (130 lines of code).<br/> <b>A cool 3d reflection effect, using some <span class="gmd_cimg"></span> 3d object rendering tricks</b> (130 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
<br/> <br/>
<a href="https://www.youtube.com/watch?v=5wQgkEjdrcw" target="_blank"> <a href="https://www.youtube.com/watch?v=5wQgkEjdrcw" target="_blank">
<img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a> <img src="img/item_clickvideo.jpg" alt="Click here to see the video" onmouseover="this.src='img/item_clickvideo2.jpg';" onmouseout="this.src='img/item_clickvideo.jpg';"/></a>
@ -479,7 +479,7 @@
<img alt="" src="img/item_description.jpg"/> : <img alt="" src="img/item_description.jpg"/> :
<b>A simple word puzzle game</b> (100 lines of code).<br/> <b>A simple word puzzle game</b> (100 lines of code).<br/>
<img alt="" src="img/item_file.jpg"/> : <img alt="" src="img/item_file.jpg"/> :
<a href="https://github.com/dtschump/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a> <a href="https://github.com/GreycLab/CImg/blob/master/examples/CImg_demo.cpp"><span class="gmd_monobold">CImg_demo.cpp</span></a>
</td> </td>
</tr></table> </tr></table>

View file

@ -7,23 +7,16 @@
# conversions for generic image types # conversions for generic image types
# ( IPL = Intel Performance Library ) # ( IPL = Intel Performance Library )
# This file is a part of the CImg Library project. # This file is a part of the CImg Library project.
# ( http://cimg.eu ) # ( http://cimg.sourceforge.net )
# #
# Copyright : Alberto Albiol # Copyright : Alberto Albiol
# alalbiol@iteam.upv.es # alalbiol@iteam.upv.es
# #
# How to use : In the main program include: # How to use : In the main program include:
# OPENCV 2.4.x
# #include "cv.h" # #include "cv.h"
# #include "highgui.h" # #include "highgui.h"
# #define cimg_plugin1 "cvMat.h" # #define cimg_plugin1 "cvMat.h"
# #include "CImg.h" # #include "CImg.h"
#
# OPENCV 3.x.x
# #include <opencv2/core.hpp>
# #define cimg_plugin1 "cvMat.h"
# #include "CImg.h"
*/ */
#ifndef cimg_plugin_cvMat #ifndef cimg_plugin_cvMat
#define cimg_plugin_cvMat #define cimg_plugin_cvMat
@ -37,14 +30,14 @@ CImg(const cv::Mat& src):_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(
CImg<T>& assign(const cv::Mat & src) { CImg<T>& assign(const cv::Mat & src) {
if (src.isContinuous()) { if (src.isContinuous()) {
switch (src.depth()) { switch (src.depth()) {
// case CV_1U: { // 1-bit int // case CV_1U: { // 1-bit int.
// IplImage *src1 = cvCreateImage(cvGetSize(src),CV_8U,1); // IplImage *src1 = cvCreateImage(cvGetSize(src),CV_8U,1);
// cvConvert(src,src1); // cvConvert(src,src1);
// CImg<ucharT>((unsigned char*)src1->imageData,src1->nChannels,src1.cols,src1.rows,1,true). // CImg<ucharT>((unsigned char*)src1->imageData,src1->nChannels,src1.cols,src1.rows,1,true).
// get_permute_axes("yzcx").move_to(*this); // get_permute_axes("yzcx").move_to(*this);
// cvReleaseImage(&src1); // cvReleaseImage(&src1);
// } break; // } break;
case CV_8U: // 8-bit unsigned int case CV_8U: // 8-bit unsigned int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<ucharT>((unsigned char*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<ucharT>((unsigned char*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -61,7 +54,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_8S: // 8-bit signed int case CV_8S: // 8-bit signed int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<charT>((char*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<charT>((char*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -78,7 +71,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_16U: // 16-bit unsigned int case CV_16U: // 16-bit unsigned int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<ushortT>((unsigned short*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<ushortT>((unsigned short*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -95,7 +88,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_16S: // 16-bit signed int case CV_16S: // 16-bit signed int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<shortT>((short*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<shortT>((short*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -112,7 +105,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_32S: // 32-bit signed int case CV_32S: // 32-bit signed int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<intT>((int*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<intT>((int*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -129,7 +122,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_32F: // 32-bit float case CV_32F: // 32-bit float.
if (src.channels()==1) { if (src.channels()==1) {
CImg<floatT>((float*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<floatT>((float*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -146,7 +139,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_64F: // 64-bit double case CV_64F: // 64-bit double.
if (src.channels()==1) { if (src.channels()==1) {
CImg<doubleT>((double*)src.ptr(),src.cols,src.rows,true).move_to(*this); CImg<doubleT>((double*)src.ptr(),src.cols,src.rows,true).move_to(*this);
} else { } else {
@ -172,7 +165,7 @@ CImg<T>& assign(const cv::Mat & src) {
} else { } else {
cv::Size size = src.size(); cv::Size size = src.size();
switch (src.depth()) { switch (src.depth()) {
case CV_8U: // 8-bit unsigned int case CV_8U: // 8-bit unsigned int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<ucharT> tmp(src.cols,src.rows); CImg<ucharT> tmp(src.cols,src.rows);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
@ -186,7 +179,7 @@ CImg<T>& assign(const cv::Mat & src) {
std::vector<cv::Mat> channels; std::vector<cv::Mat> channels;
cv::split(src,channels); cv::split(src,channels);
for (int c = 0; c<src.channels(); ++c) { for (int c = 0; c<src.channels(); ++c) {
CImg<ucharT> plane = tmp.get_shared_channel(src.channels() - 1 - c); CImg<ucharT> plane = tmp.get_shared_channel(src.channels()-1-c);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
const unsigned char* row_i = channels[c].ptr<unsigned char>(i); const unsigned char* row_i = channels[c].ptr<unsigned char>(i);
unsigned char *row_o = plane.data(0,i); unsigned char *row_o = plane.data(0,i);
@ -196,7 +189,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_8S: // 8-bit int case CV_8S: // 8-bit int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<charT> tmp(src.cols,src.rows); CImg<charT> tmp(src.cols,src.rows);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
@ -210,7 +203,7 @@ CImg<T>& assign(const cv::Mat & src) {
std::vector<cv::Mat> channels; std::vector<cv::Mat> channels;
cv::split(src,channels); cv::split(src,channels);
for (int c = 0; c<src.channels(); ++c) { for (int c = 0; c<src.channels(); ++c) {
CImg<charT> plane = tmp.get_shared_channel(src.channels() - 1 - c); CImg<charT> plane = tmp.get_shared_channel(src.channels()-1-c);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
const char* row_i = channels[c].ptr<char>(i); const char* row_i = channels[c].ptr<char>(i);
char *row_o = plane.data(0,i); char *row_o = plane.data(0,i);
@ -220,7 +213,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_16S: // 16-bit int case CV_16S: // 16-bit int.
if (src.channels()==1) { if (src.channels()==1) {
CImg<shortT> tmp(src.cols,src.rows); CImg<shortT> tmp(src.cols,src.rows);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
@ -234,7 +227,7 @@ CImg<T>& assign(const cv::Mat & src) {
std::vector<cv::Mat> channels; std::vector<cv::Mat> channels;
cv::split(src,channels); cv::split(src,channels);
for (int c = 0; c<src.channels(); ++c) { for (int c = 0; c<src.channels(); ++c) {
CImg<shortT> plane = tmp.get_shared_channel(src.channels() - 1 - c); CImg<shortT> plane = tmp.get_shared_channel(src.channels()-1-c);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
const short* row_i = channels[c].ptr<short>(i); const short* row_i = channels[c].ptr<short>(i);
short *row_o = plane.data(0,i); short *row_o = plane.data(0,i);
@ -244,7 +237,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_32F: // 32-bit float case CV_32F: // 32-bit float.float
if (src.channels()==1) { if (src.channels()==1) {
CImg<floatT> tmp(src.cols,src.rows); CImg<floatT> tmp(src.cols,src.rows);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
@ -258,7 +251,7 @@ CImg<T>& assign(const cv::Mat & src) {
std::vector<cv::Mat> channels; std::vector<cv::Mat> channels;
cv::split(src,channels); cv::split(src,channels);
for (int c = 0; c<src.channels(); ++c) { for (int c = 0; c<src.channels(); ++c) {
CImg<floatT> plane = tmp.get_shared_channel(src.channels() - 1 - c); CImg<floatT> plane = tmp.get_shared_channel(src.channels()-1-c);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
const float* row_i = channels[c].ptr<float>(i); const float* row_i = channels[c].ptr<float>(i);
float *row_o = plane.data(0,i); float *row_o = plane.data(0,i);
@ -268,7 +261,7 @@ CImg<T>& assign(const cv::Mat & src) {
tmp.move_to(*this); tmp.move_to(*this);
} }
break; break;
case CV_64F: // 64-bit double case CV_64F: // 64-bit double.
if (src.channels()==1) { if (src.channels()==1) {
CImg<doubleT> tmp(src.cols,src.rows); CImg<doubleT> tmp(src.cols,src.rows);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
@ -282,7 +275,7 @@ CImg<T>& assign(const cv::Mat & src) {
std::vector<cv::Mat> channels; std::vector<cv::Mat> channels;
cv::split(src,channels); cv::split(src,channels);
for (int c = 0; c<src.channels(); ++c) { for (int c = 0; c<src.channels(); ++c) {
CImg<doubleT> plane = tmp.get_shared_channel(src.channels() - 1 - c); CImg<doubleT> plane = tmp.get_shared_channel(src.channels()-1-c);
for (int i = 0; i<size.height; ++i) { for (int i = 0; i<size.height; ++i) {
const double* row_i = channels[c].ptr<double>(i); const double* row_i = channels[c].ptr<double>(i);
double *row_o = plane.data(0,i); double *row_o = plane.data(0,i);
@ -326,12 +319,19 @@ cv::Mat get_MAT(const unsigned int z=0) const {
matType=-1; matType=-1;
if (!cimg::strcasecmp(buf.pixel_type(),"unsigned char")) matType = CV_8UC1; if (!cimg::strcasecmp(buf.pixel_type(),"unsigned char")) matType = CV_8UC1;
if (!cimg::strcasecmp(buf.pixel_type(),"uint8")) matType = CV_8UC1;
if (!cimg::strcasecmp(buf.pixel_type(),"char")) matType = CV_8SC1; if (!cimg::strcasecmp(buf.pixel_type(),"char")) matType = CV_8SC1;
if (!cimg::strcasecmp(buf.pixel_type(),"int8")) matType = CV_8SC1;
if (!cimg::strcasecmp(buf.pixel_type(),"unsigned short")) matType = CV_16UC1; if (!cimg::strcasecmp(buf.pixel_type(),"unsigned short")) matType = CV_16UC1;
if (!cimg::strcasecmp(buf.pixel_type(),"uint16")) matType = CV_16UC1;
if (!cimg::strcasecmp(buf.pixel_type(),"short")) matType = CV_16SC1; if (!cimg::strcasecmp(buf.pixel_type(),"short")) matType = CV_16SC1;
if (!cimg::strcasecmp(buf.pixel_type(),"int16")) matType = CV_16SC1;
if (!cimg::strcasecmp(buf.pixel_type(),"int")) matType = CV_32SC1; if (!cimg::strcasecmp(buf.pixel_type(),"int")) matType = CV_32SC1;
if (!cimg::strcasecmp(buf.pixel_type(),"int32")) matType = CV_32SC1;
if (!cimg::strcasecmp(buf.pixel_type(),"float")) matType = CV_32FC1; if (!cimg::strcasecmp(buf.pixel_type(),"float")) matType = CV_32FC1;
if (!cimg::strcasecmp(buf.pixel_type(),"float32")) matType = CV_32FC1;
if (!cimg::strcasecmp(buf.pixel_type(),"double")) matType = CV_64FC1; if (!cimg::strcasecmp(buf.pixel_type(),"double")) matType = CV_64FC1;
if (!cimg::strcasecmp(buf.pixel_type(),"float64")) matType = CV_64FC1;
if (matType<0) if (matType<0)
throw CImgInstanceException(_cimg_instance throw CImgInstanceException(_cimg_instance
"get_MAT() : pixel type '%s' is not supported.", "get_MAT() : pixel type '%s' is not supported.",
@ -340,7 +340,7 @@ cv::Mat get_MAT(const unsigned int z=0) const {
std::vector<cv::Mat> channels(nchannels); std::vector<cv::Mat> channels(nchannels);
if (nchannels>1) { if (nchannels>1) {
for (int c = 0; c<nchannels; ++c) { for (int c = 0; c<nchannels; ++c) {
channels[c] = cv::Mat(rows,cols,matType,const_cast<T*>(buf.data() + rows*cols*(nchannels - 1 - c))); channels[c] = cv::Mat(rows,cols,matType,const_cast<T*>(buf.data()+rows*cols*(nchannels-1-c)));
} // for channels } // for channels
cv::merge(channels,out); cv::merge(channels,out);
} else out = cv::Mat(rows,cols,matType,const_cast<T*>(buf.data())).clone(); } else out = cv::Mat(rows,cols,matType,const_cast<T*>(buf.data())).clone();

View file

@ -159,7 +159,7 @@ CImg<T>& load_tiff(std::istream* tiffInStream,
TIFFSetDirectory(tif,0); TIFFSetDirectory(tif,0);
CImg<T> frame; CImg<T> frame;
for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) { for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) {
frame._load_tiff(tif,l,0,0); frame._load_tiff(tif,l,0,0,0);
if (l==nfirst_frame) if (l==nfirst_frame)
assign(frame._width,frame._height,1 + (nlast_frame - nfirst_frame)/nstep_frame,frame._spectrum); assign(frame._width,frame._height,1 + (nlast_frame - nfirst_frame)/nstep_frame,frame._spectrum);
if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum) if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum)

View file

@ -141,7 +141,7 @@ echo -e "\n** Log generated by 'doxygen' **\n\n">>$LOG_FILE
echo " - Build reference documentation in PDF format." echo " - Build reference documentation in PDF format."
cd $SRC_DIR/html/latex cd $SRC_DIR/html/latex
gmic it structcimg__library_1_1CImg.tex replace_str \"operator%\",\"operator\\\\%\" ot structcimg__library_1_1CImg.tex # gmic it structcimg__library_1_1CImg.tex replace_str \"operator%\",\"operator\\\\%\" ot structcimg__library_1_1CImg.tex
echo -e "\n** Log generated by 'latex' **\n\n">>$LOG_FILE echo -e "\n** Log generated by 'latex' **\n\n">>$LOG_FILE
make>>$LOG_FILE 2>&1 make>>$LOG_FILE 2>&1
cp -f refman.pdf ../CImg_reference.pdf cp -f refman.pdf ../CImg_reference.pdf
@ -152,6 +152,8 @@ rm -rf ../latex
echo " - Commit on GIT repository." echo " - Commit on GIT repository."
cd $SRC_DIR cd $SRC_DIR
if [ "$1" == "final" ]; then if [ "$1" == "final" ]; then
git push --delete origin v.$SVERSION
git pull
git tag -d v.$SVERSION git tag -d v.$SVERSION
git tag v.$SVERSION git tag v.$SVERSION
git commit -m "Final release "${SVERSION} >>$LOG_FILE 2>&1 git commit -m "Final release "${SVERSION} >>$LOG_FILE 2>&1
@ -175,12 +177,12 @@ mv $ZIP_FILE $BASE_DIR
# Copy files to CImg server. # Copy files to CImg server.
cd $BASE_DIR cd $BASE_DIR
if [ "$1" == "final" ]; then if [ "$1" == "final" ]; then
lftp ftp://$GMIC_LOGIN:$GMIC_PASSWD@$GMIC_FTP -e "put -O /www/CImg/files/ ${ZIP_FILE}; quit"; lftp sftp://$GMIC_LOGIN:@ovh -e "put -O /home/"$GMIC_LOGIN"/www/CImg/files/ ${ZIP_FILE}; quit";
fi fi
lftp ftp://$GMIC_LOGIN:$GMIC_PASSWD@$GMIC_FTP -e "put -O /www/CImg/files/ ${ZIP_FILE} -o CImg_latest.zip; quit" lftp sftp://$GMIC_LOGIN:@ovh -e "put -O /home/"$GMIC_LOGIN"/www/CImg/files/ ${ZIP_FILE} -o CImg_latest.zip; quit"
cd $SRC_DIR/html/ cd $SRC_DIR/html/
lftp ftp://$GMIC_LOGIN:$GMIC_PASSWD@$GMIC_FTP -e "mirror -RL . /www/CImg/ ; quit" lftp sftp://$GMIC_LOGIN:@ovh -e "mirror -RL . /home/"$GMIC_LOGIN"/www/CImg/ ; quit"
# End of build script # End of build script
echo -e " - All done, you should look at the LOG file '$LOG_FILE'.\n" echo -e " - All done, you should look at the LOG file '$LOG_FILE'.\n"

View file

@ -1,4 +1,4 @@
#!/usr/bin/gmic #!/usr/bin/env gmic
skip "${1=}" skip "${1=}"
@ -19,21 +19,22 @@ pwd={`"
# Upload file or directory. # Upload file or directory.
if "s = ['$1']; "$is_pwd" && (s==0 || s=='.')" # Synchronize current directory if "s = ['$1']; "$is_pwd" && (s==0 || s=='.')" # Synchronize current directory
e[] "Synchronize current directory '"${pwd}"' with 'SERVER"${pwd}"'.\n" e[] "Synchronize current directory '"${pwd}"' with 'SERVER"${pwd}"'.\n"
com="lftp ftp://"$GMIC_LOGIN":"$GMIC_PASSWD"@"$GMIC_FTP" -e \"mirror -RL . /www/CImg"${pwd}" ; quit\"" com="lftp sftp://"$GMIC_LOGIN":@ovh -e \"mirror -RL . /home/"$GMIC_LOGIN"/www/CImg"${pwd}" ; quit\""
x $com x $com
elif $is_pwd" && isdir(['"$1"'])" # Synchronize specified directory elif $is_pwd" && isdir(['"$1"'])" # Synchronize specified directory
e[] "Synchronize directory '$1' with 'SERVER"${pwd}"$1'.\n" e[] "Synchronize directory '$1' with 'SERVER"${pwd}"$1'.\n"
com="lftp ftp://"$GMIC_LOGIN":"$GMIC_PASSWD"@"$GMIC_FTP" -e \"mirror -RL \\\"$1\\\" \\\"/www/CImg"${pwd}"$1\\\" ; quit\"" com="lftp sftp://"$GMIC_LOGIN":@ovh -e \"mirror -RL \\\"$1\\\" \\\"/home/"$GMIC_LOGIN"/www/CImg"${pwd}"$1\\\" ; quit\""
x $com x $com
elif isfile(['"$1"']) # Upload single file elif isfile(['"$1"']) # Upload single file
if !$is_pwd pwd="/" fi if !$is_pwd pwd="/" fi
e[] "Upload file '$1' to 'SERVER"${pwd}"'.\n" e[] "Upload file '$1' to 'SERVER"${pwd}"'.\n"
com="lftp ftp://"$GMIC_LOGIN":"$GMIC_PASSWD"@"$GMIC_FTP" -e \"put -O \\\"/www/CImg"${pwd}"\\\" \\\"$1\\\"; quit\"" com="lftp sftp://"$GMIC_LOGIN":@ovh -e \"put -O \\\"/home/"$GMIC_LOGIN"/www/CImg"${pwd}"\\\" \\\"$1\\\"; quit\""
x $com x $com
fi fi
rm
# Local Variables: # Local Variables:
# mode: sh # mode: sh