Image Cytometry Standard file reading and writing.
Roff Shell C Makefile C++ CMake M4
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
autom4te.cache
cmake Update libics install following CMake conventions Jun 8, 2018
docs
m4 re-added files generated by bootstrap script Oct 20, 2016
support replaced references to sourceforge Oct 19, 2016
test Added a test suite for the library. Jun 18, 2010
.gitignore Modernized CMakeLists, fixed compiler warnings (#7) Dec 14, 2017
CMakeLists.txt Update libics install following CMake conventions Jun 8, 2018
GNU_LICENSE Copy of current content in CVS. See CVS for history of each file. Jun 7, 2010
INSTALL document cmake support Mar 3, 2017
Makefile.am fix automake handling of test scripts Apr 19, 2018
Makefile.bcc edited copyrights and credits Oct 20, 2016
Makefile.in
Makefile.vc6 edited copyrights and credits Oct 20, 2016
Makefile.vc9 edited copyrights and credits Oct 20, 2016
README Fixed typos, and changed my affiliation to the one I had when I did m… Jul 16, 2018
TODO
aclocal.m4 run bootstrap.sh Jul 26, 2017
bootstrap.sh more edits for style Jan 13, 2017
compile re-added files generated by bootstrap script Oct 20, 2016
config.guess run bootstrap.sh Jul 26, 2017
config.h.in Use strtok_r if available for thread safety Mar 26, 2018
config.sub run bootstrap.sh Jul 26, 2017
configure fix automake handling of test scripts Apr 19, 2018
configure.ac fix automake handling of test scripts Apr 19, 2018
depcomp
install-sh re-added files generated by bootstrap script Oct 20, 2016
libics.def update libics.def Apr 24, 2017
libics.h Adds `IcsSetByteOrder`, to allow specifying the byte order of an exte… Jul 16, 2018
libics_binary.c Adds `IcsSetByteOrder`, to allow specifying the byte order of an exte… Jul 16, 2018
libics_compress.c Modernized CMakeLists, fixed compiler warnings (#7) Dec 14, 2017
libics_conf.h.in Use strtok_r if available for thread safety Mar 26, 2018
libics_data.c Some cleanup of the sensor parameter code, and added some more parame… Oct 20, 2017
libics_gzip.c Fixes for building without ZLib (no compiler warnings, no test errors). Apr 19, 2018
libics_history.c Fixed typos, and changed my affiliation to the one I had when I did m… Jul 16, 2018
libics_intern.h Adds `IcsSetByteOrder`, to allow specifying the byte order of an exte… Jul 16, 2018
libics_ll.h
libics_preview.c Modernized CMakeLists, fixed compiler warnings (#7) Dec 14, 2017
libics_read.c Use strtok_r if available for thread safety Mar 26, 2018
libics_sensor.c
libics_sensor.h formatting Apr 25, 2017
libics_test.c further updates to the style Jan 13, 2017
libics_test.h more edits for style Jan 13, 2017
libics_top.c Adds `IcsSetByteOrder`, to allow specifying the byte order of an exte… Jul 16, 2018
libics_util.c
libics_write.c Adds `IcsSetByteOrder`, to allow specifying the byte order of an exte… Jul 16, 2018
ltmain.sh run bootstrap.sh Jul 26, 2017
missing re-added files generated by bootstrap script Oct 20, 2016
test-driver re-added files generated by bootstrap script Oct 20, 2016
test_compress.c Fixes for building without ZLib (no compiler warnings, no test errors). Apr 19, 2018
test_compress.sh
test_gzip.c further updates to the style Jan 13, 2017
test_gzip.sh Added a test suite for the library. Jun 18, 2010
test_history.c
test_history.sh
test_ics1.c further updates to the style Jan 13, 2017
test_ics1.sh Fixed tests 1 and 2a, which didn't work for big-endian machines. `Ics… Apr 3, 2012
test_ics2a.c
test_ics2a.sh Added a test suite for the library. Jun 18, 2010
test_ics2b.c further updates to the style Jan 13, 2017
test_ics2b.sh Added a test suite for the library. Jun 18, 2010
test_metadata.c Improvement to the metadata test. Jul 16, 2018
test_metadata1.sh fix automake handling of test scripts Apr 19, 2018
test_metadata2.sh fix automake handling of test scripts Apr 19, 2018
test_strides.c Fixes for building without ZLib (no compiler warnings, no test errors). Apr 19, 2018
test_strides.sh Added a test suite for the library. Jun 18, 2010
test_strides2.c Fixes for building without ZLib (no compiler warnings, no test errors). Apr 19, 2018
test_strides2.sh Allowing negative strides. Jul 26, 2017
test_strides3.c Fixed compiler waring. Jul 16, 2018
test_strides3.sh Allowing negative strides. Jul 26, 2017

README

                             libics v.1.6.1
          Image Cytometry Standard file reading and writing.

This is the reference library for ICS (Image Cytometry Standard), an
open standard for writing images of any dimensionality and data type to
file, together with associated information regarding the recording
equipment or recorded subject.

   ICS version 1.0 and 2.0
=============================

ICS stands for Image Cytometry Standard, and was first proposed in:
     P. Dean, L. Mascio, D. Ow, D. Sudar, J. Mullikin, "Propsed
     standard for image cytometry data files", Cytometry, n.11,
     pp.561-569, 1990.

It writes 2 files, one is the header, with an '.ics' extension, and the
other is the actual image data (with an '.ids' extension.)

ICS version 2.0 extends this standard to allow for a more versatile
placement of the image data. It can now be placed either in the same
'.ics' file or inbedded in any other file, by specifying the file name
and the byte offset for the data.

The advantage of ICS over other open standards such as TIFF is that it
allows data of any type and dimensionality to be stored. A TIFF file
can contain a collection of 2D images; it's up to the user to determine
how these relate to each other. An ICS file can contain, for exmaple, a
5D image in which the 4th dimension is the light frequency and the 5th
time. Also, all of the information regarding the microscope settings
(or whatever instument was used to acquire the image) and the sample
preparation can be included in the file.

This library is distributed under the GNU LESSER GENERAL PUBLIC
LICENSE. See the file GNU_LICENSE for terms.

The libics library is currently maintained by Scientific Volume Imaging
(https://svi.nl).  Please mail comments, bugs and feature requests to:
libics@svi.nl

   Documentation
==============================

   Online documentation can be found at: https://svi-opensource.github.io/libics

   Installation Instructions
===============================

Obtain the source distribution from
   https://github.com/svi-opensource/libics
It is recommended you also install zlib (http://www.zlib.org).

 - Compilation under UNIX / Linux / Mac OS X / Cygwin

Run the following commands from the source directory:
   ./configure
   make
   make install
Read the INSTALL file for more information.

The library can be tested for problems using
   make check

 - Compilation under Windows with Borland C++

Edit the paths defined at the beginning of Makefile.bcc, then type
   make -f Makefile.bcc
from a command prompt in the source directory. This will create a file
libics.lib in the same directory. To build a dynamic library (DLL), type
   make -f Makefile.bcc dynamic
The dynamic library libics.dll has an import library named
libics.dll.lib. To make a debug version add '-DDEBUG' to these commands.
To disable zlib support, remove the definition of ZLIB_SUPPORT from the
file Makefile.bcc.
When compiling a program that uses the dynamic library, you need to
define the USE_ICSLIB_DLL pre-processor variable.

 - Compilation under Windows with Microsoft Visual C++ 9

Edit the path to Zlib defined at the beginning of Makefile.vc9, then
type
   nmake /f Makefile.vc9
from a command prompt in the source directory. This will create a
dynamic library libics.dll in the same directory, and an import library
libics.lib. Change the definitions of SHARED or DEBUG in the makefile to
create static and/or debug versions of the library. To disable zlib
support, remove the definition of ZLIB_SUPPORT from the makefile.
When compiling a program that uses the dynamic library, you need to
define the USE_ICSLIB_DLL pre-processor variable.

 - Compilation under Windows with older versions of Microsoft Visual C++

Edit the paths defined at the beginning of Makefile.vc6, then type
   nmake /f Makefile.vc6
from a command prompt in the source directory. This will create a file
libics.lib in the same directory. To build a dynamic library, type
   nmake /f Makefile.vc6 dynamic
The dynamic library libics.dll has an import library named
libics.dll.lib. To make a debug version add '/D DEBUG' to these
commands. To disable zlib support, remove the definition of ZLIB_SUPPORT
from the file Makefile.vc.

 - Compilation with CMake under UNIX / Linux / Mac OS X / Cygwin

Run the following commands from outside the source directory
   cmake <path/to/libics/sources>
   make
   make install

The library can be tested for problems using
   make test

CMake can be used with the following options:
   cmake ... -DCMAKE_BUILD_TYPE=Debug
   cmake ... -DLIBICS_USE_ZLIB=Off

CMake projects using libics as a subproject can do
   add_subdirectory(<path/to/libics/sources>)
   target_link_libraries(target PRIVATE libics)
or
   target_link_libraries(target PRIVATE libics_static)
The include directory for libics will be automatically set, and the ZLib
library will be linked if necessary.

 - Compilation with cmake on Windows:

Type on the command line
   cmake CMakeLists.txt
or use cmake GUI. Next, open sln file in Visual Studio and build solution.


   CREDITS
=============

As of 2016, this library is maintained by Scientific Volume Imaging:
   Scientific Volume Imaging Holding B.V.
   Laapersveld 63, 1213 VB Hilversum, The Netherlands
   https://www.svi.nl

This library was originally written and maintained by
   Cris Luengo
   (previously at) Delft University of Technology, Delft, NL

With help from
   Bert Gijsbers, Scientific Volume Imaging BV, Hilversum, NL
      (Most changes for version 1.3)
   Frank de Jong, Delft University of Technology, Delft, NL
      (IcsViewer utility improvements)
   Fons Laan, Hubrecht Laboratorium, Utrecht, NL
      (SCIL_Image compatability, make files, bug fixes)
   Glenn Pierce
      (Idea of opening in "rw" mode and history iterator)
   David Svoboda, Masaryk University, Brno, Czech Republic
      (Windows make files)
   Peter Verveer, Scientific Volume Imaging BV, Hilversum, NL
      (autoconf/automake script)
   Paul Barber, University of Oxford, Oxford, United Kingdom
      (cmake support)

Most of the code herein hasn't changed since the previous version, by
   Dr. Hans T.M. van der Voort
   Scientific Volume Imaging Holding B.V.
   Laapersveld 63, 1213 VB Hilversum, The Netherlands
   https://www.svi.nl

Which ultimately is based upon stuff written by:
   Damir Sudar, Geert van Kempen, Jan Jitze Krol,
   Chiel Baarslag, Fons Laan and Hans van der Voort.


   HISTORY
=============

version 1.6.1
   - Various bug-fixes.
   - Added SPIM parameters.
   - Added scattering parameters.
   - New functions that return ICS string properties without string copying.
   - Enable the use of negative strides.

version 1.6.0
   Added functionality:
   - Read and write sensor states.
   - Support for cmake (contributed by Paul Barber).

version 1.5.4
   - Small patch for supporting older Visual Studio version.

version 1.5.3
   Changes / improvements / fixes:
   - Fixed documentation and made explicit the current default to version
   2.0 files.
   - Added a "links" page to the documentation.
   - Fixed tests 1 and 2a, which didn't work for big-endian machines.
   - IcsWriteIcs() no longer overwrites data in the ByteOrder array.
   - Fixed a segmentation violation when trying to write an image with
   more than 5 dimensions.
   - Added STED and detector parameters
   - Fixed a bug to read large compressed files.
   - Moved distribution to to github

version 1.5.2
   Added functionality:
   - UNIX make files now also generate a shared object using libtool.
   - Added a Makefile for MSVC9.
   - Added code to read COMPRESS-compressed data (.ids.Z).
   - Added a test suite for the library.
   Changes / improvements / fixes:
   - Fixed bug in IcsGetDataWithStrides() when stride[0]==1.
   - Fixed buffer overflow in IcsInternAddHistory() when adding lots of
     history strings (not an exploitable vulnerability).
   - Fixed bug in "l" option to IcsOpen, it behaved in the oposite way
     to that advertised (bug #2943839).
   The documentation still carries the version number 1.5.

version 1.5.1
   Added functionality:
   - IcsGetDataWithStrides() makes it easy to read in an ICS file into
     a non-contiguous memory block such as an ROI, or to have different
     dimension ordering in memory.
   Changes / improvements / fixes:
   - Fixed buffer overflow when trying to read a binary file (not an
     exploitable vulnerability).
   - Fixed bug in IcsInternAddHistory() if key==NULL.
   - Rewrote IcsStrCpy(), it no longer needs the full len chars in dest
     if src is shorter than len.
   - The MATLAB MEX-files in support/matlab have finally been updated
     to work on 64-bit platforms.
   The documentation still carries the version number 1.5.

version 1.5
   Added functionality:
   - IcsSetIdsBlock() in low-level interface does fseek() on image data.
   - Added "rw" mode to IcsOpen(). It's now possible to change metadata
     in an ICS file.
   - Added functions to delete, replace and retrieve history lines.
   Changes / improvements / fixes:
   - When reading and writing the ICS header file, the locale is set to
     "C". This can be avoided with the "l" flag in IcsOpen().
   - Fixed printf type mismatch	according to bug #1245419.
   - Added a bunch of 'const' modifiers according to feature request
     #1245471.
   - Reorganized a few things on the website and added a menu bar.
   - Windows makefile changes relating to zlib.
   - The strcasecmp/stricmp is finally resolved neatly.
   - Renamed libics_compress.c to libics_gzip.c to prepare for the
     inclusion of 'compress' decompression.
   - Separated all history code into new libics_history.c file.
   - Renamed a few internal functions in libics_write.c for consistency.
   - Stop writing 0.0 in exponential notation.
   - FileMode replaces Reading in the ICS data structure.
   - Default 5th dimension now is "probe" instead of "p".
   - The history lines are stored in a more useful fashion in the
     IcsHeader struct. The struct itself changed.

version 1.4.1
   Added functionality:
   - Replaced config files with autoconf scripts.
   Changes / improvements / fixes:
   - The MAXPATHLEN define is replaced by a custom ICS_MAXPATHLEN. This
     improves portability.
   - The strcasecmp/stricmp thing is moved to where it matters:
     libics_util.c
   - Fixed compile bug when not linking with zlib.
   - Moved web stuff to SourceForge.net.
   - Changed the presentation page of the website a bit.
   The documentation still carries the version number 1.4.

version 1.4
   Added functionality:
   - IcsSetDataWithStrides() allows writing data that is not stored in
     the default x-y-z order, as well as a ROI in a larger image.
   - IcsOpen() now also has a mode "rf" which avoids adding the ".ics"
     extension to the given file name.
   Changes / improvements / fixes:
   - IcsVersion(), IcsReadIcs() and IcsGetIcsName() have an extra
     parameter that indicates whether to add the extension to the given
     file name or not.
   - IcsInit() is now declared as a void function.
   - The ICS structure has a new element: DataStrides.
   - The file libics_compress.non.ansi.c is no longer.
   - ICS_MAXDIM now is 10, up from 5.
   - Allowing for axes scaling to be <= 0.
   - Bugfix: small values are also written in scientific notation.
   - Creation of DLL added to Windows Makefiles.

version 1.3 (Most changes by Bert Gijsbers)
   Added functionality:
   - Added PinholeSpacing to sensor parameters.
   - IcsExtensionFind() finds extensions including .ids.Z and .ids.gz.
   - IcsGetSensor and IcsSetSensor functions to get and set the sensor
     parameters.
   - IcsGetErrorText() returns string representation of error.
   Changes / improvements / fixes:
   - IcsGetIcsName() and IcsGetIdsName() now preserve the case in the
     extension.
   - 'struct _ICS' is now defined besides the 'ICS' typedef.
   - IcsPrintIcs() would loop forever with non-zero sensor channels.
   - Some %d format strings were called with a long int argument.
   - Dimension types are now always size_t instead of int.
   - Big improvements in the IcsViewer utility (by Frank de Jong).

version 1.2.1
   A few small bug fixes:
   - 12 bytes got lost because a free() call was missing.
   - Reading a compressed file in blocks caused a SGV if the last imel
     was included in the block (because of the CRC).
   - support/icsviewer now adds some padding to each image line so that
     Windows correctly displays the image.
   The documentation still carries the version number 1.2.

version 1.2
   Added functions:
   - IcsGetROIData(), and the more general IcsGetDataBlock(),
     IcsSkipDataBlock(). These funcions make it possible to read in
     only a portion of the image data.
   - IcsGetPreviewData() reads in a 2D sub-image, and converts it to
     unsinged 8-bit integers for display.
   - IcsLoadPreview() does the same, but just takes a file name. It
     allocates the image buffer for you.
   Changes / improvements / fixes:
   - Many "unsigned int" parameters have been changed to "size_t". This
     improves portability to 64-bit systems (and fixes some bugs too).
   - Added return error codes to the documentation, as well as some
     other interesting information.
   - Corrected some bugs in the documentation.
   - Added 'extern "C" {}' to the public header files so libics can be
     used with C++.

version 1.1
   Some improvements:
   - Added support for the 'SCIL_TYPE' parameter (thanks to Fons Laan).
     Call IcsSetScilType() or IcsGuessScilType() to write the parameter
     to the ICS file.
   - Any character is now allowed as a line separator, as specified in
     the standard.
   - ICS files with CR/LF pairs instead of CR characters only are now
     also supported. The CR/LF pair problem is caused by some windows
     applications that automatically convert 'text' files to the MS-DOS
     format. These were not read by libics.
   - Some low-level library functions have been renamed to make the
     interface more consistent:
     IcsRead()   -> IcsReadIcs()
     IcsWrite()  -> IcsWriteIcs()
     IdsRead()   -> IcsReadIds()
     IdsWrite()  -> IcsWriteIds()
   - The documentation has been updated and corrected.

version 1.0
   Initial release.