\contentsline {chapter}{\numberline {1}VIPS from C++ and Python}{1} \contentsline {section}{\numberline {1.1}Introduction}{1} \contentsline {subsection}{\numberline {1.1.1}If you've used the C API}{1} \contentsline {section}{\numberline {1.2}The VIPS file format}{1} \contentsline {subsection}{\numberline {1.2.1}VIPS file header}{1} \contentsline {subsection}{\numberline {1.2.2}Computation formats}{3} \contentsline {subsection}{\numberline {1.2.3}Storage formats}{3} \contentsline {section}{\numberline {1.3}The \texttt {VImage} class}{3} \contentsline {subsection}{\numberline {1.3.1}Constructors}{3} \contentsline {subsection}{\numberline {1.3.2}File conversion}{5} \contentsline {subsection}{\numberline {1.3.3}Projection functions}{5} \contentsline {subsection}{\numberline {1.3.4}Assignment}{6} \contentsline {subsection}{\numberline {1.3.5}Computing with \texttt {VImage}s}{6} \contentsline {subsection}{\numberline {1.3.6}Writing results}{7} \contentsline {subsection}{\numberline {1.3.7}Type conversions}{7} \contentsline {section}{\numberline {1.4}The \texttt {VMask} class}{7} \contentsline {subsection}{\numberline {1.4.1}Constructors}{7} \contentsline {subsection}{\numberline {1.4.2}Projection functions}{7} \contentsline {subsection}{\numberline {1.4.3}Assignment}{7} \contentsline {subsection}{\numberline {1.4.4}Computing with \texttt {VMask}}{8} \contentsline {subsection}{\numberline {1.4.5}\texttt {VIMask} operations}{8} \contentsline {subsection}{\numberline {1.4.6}\texttt {VDMask} operations}{8} \contentsline {subsection}{\numberline {1.4.7}Output of masks}{8} \contentsline {section}{\numberline {1.5}The \texttt {VDisplay} class}{8} \contentsline {subsection}{\numberline {1.5.1}Constructors}{8} \contentsline {subsection}{\numberline {1.5.2}Projection functions}{9} \contentsline {section}{\numberline {1.6}The \texttt {VError} class}{9} \contentsline {subsection}{\numberline {1.6.1}Constructors}{9} \contentsline {subsection}{\numberline {1.6.2}Projection functions}{9} \contentsline {subsection}{\numberline {1.6.3}Computing with \texttt {VError}}{9} \contentsline {subsection}{\numberline {1.6.4}Convenience function}{9} \contentsline {chapter}{\numberline {2}VIPS for C programmers}{11} \contentsline {section}{\numberline {2.1}Introduction}{11} \contentsline {section}{\numberline {2.2}Core C API}{11} \contentsline {subsection}{\numberline {2.2.1}Startup}{11} \contentsline {subsection}{\numberline {2.2.2}Image descriptors}{13} \contentsline {subsection}{\numberline {2.2.3}Header fields}{13} \contentsline {subsection}{\numberline {2.2.4}Opening and closing}{13} \contentsline {subsection}{\numberline {2.2.5}Examples}{16} \contentsline {subsection}{\numberline {2.2.6}Metadata}{16} \contentsline {subsection}{\numberline {2.2.7}History}{19} \contentsline {subsection}{\numberline {2.2.8}Eval callbacks}{19} \contentsline {subsection}{\numberline {2.2.9}Detailed rules for descriptors}{19} \contentsline {subsection}{\numberline {2.2.10}Automatic resource deallocation}{19} \contentsline {subsubsection}{Local image descriptors}{19} \contentsline {subsubsection}{Local memory allocation}{21} \contentsline {subsubsection}{Other local operations}{21} \contentsline {subsection}{\numberline {2.2.11}Error handling}{21} \contentsline {subsection}{\numberline {2.2.12}Joining operations together}{21} \contentsline {subsubsection}{How it works}{22} \contentsline {subsubsection}{Pitfalls with partials}{22} \contentsline {subsubsection}{Non-image output}{23} \contentsline {subsubsection}{Calculating twice}{23} \contentsline {subsubsection}{Blocking computation}{23} \contentsline {subsubsection}{Limitations}{23} \contentsline {section}{\numberline {2.3}Function dispatch and plug-ins}{23} \contentsline {subsection}{\numberline {2.3.1}Simple plugin example}{24} \contentsline {subsection}{\numberline {2.3.2}A more complicated example}{27} \contentsline {subsection}{\numberline {2.3.3}Adding new types}{27} \contentsline {subsection}{\numberline {2.3.4}Using function dispatch in your application}{29} \contentsline {subsubsection}{Adding and removing functions}{29} \contentsline {subsubsection}{Searching the function database}{30} \contentsline {subsubsection}{Building argument structures and running commands}{30} \contentsline {chapter}{\numberline {3}Writing VIPS operations}{31} \contentsline {section}{\numberline {3.1}Introduction}{31} \contentsline {subsection}{\numberline {3.1.1}Why use VIPS?}{31} \contentsline {subsection}{\numberline {3.1.2}I/O styles}{31} \contentsline {subsection}{\numberline {3.1.3}What's new in this version}{32} \contentsline {section}{\numberline {3.2}Programming WIO operations}{32} \contentsline {subsection}{\numberline {3.2.1}Input from an image}{32} \contentsline {subsection}{\numberline {3.2.2}Output to an image}{34} \contentsline {subsection}{\numberline {3.2.3}Polymorphism}{34} \contentsline {section}{\numberline {3.3}Programming PIO functions}{36} \contentsline {subsection}{\numberline {3.3.1}Easy PIO with \texttt {im\_wrapone()} and \texttt {im\_wrapmany()}}{36} \contentsline {subsection}{\numberline {3.3.2}Region descriptors}{40} \contentsline {subsection}{\numberline {3.3.3}Image input with regions}{41} \contentsline {subsection}{\numberline {3.3.4}Splitting into sequences}{41} \contentsline {subsection}{\numberline {3.3.5}Output to regions}{44} \contentsline {subsection}{\numberline {3.3.6}Callbacks}{44} \contentsline {subsubsection}{Close callbacks}{44} \contentsline {subsubsection}{Eval callbacks}{50} \contentsline {subsubsection}{Evalend callbacks}{50} \contentsline {subsection}{\numberline {3.3.7}Memory allocation revisited}{50} \contentsline {section}{\numberline {3.4}Programming in-place functions}{50} \contentsline {chapter}{\numberline {4}VIPS reference}{53} \contentsline {section}{\numberline {4.1}Introduction}{53} \contentsline {section}{\numberline {4.2}VIPS packages}{53} \contentsline {subsection}{\numberline {4.2.1}Arithmetic}{53} \contentsline {subsection}{\numberline {4.2.2}Relational}{55} \contentsline {subsection}{\numberline {4.2.3}Boolean}{55} \contentsline {subsection}{\numberline {4.2.4}Colour}{55} \contentsline {subsection}{\numberline {4.2.5}Conversion}{58} \contentsline {subsection}{\numberline {4.2.6}Matricies}{58} \contentsline {subsection}{\numberline {4.2.7}Convolution}{61} \contentsline {subsection}{\numberline {4.2.8}In-place operations}{61} \contentsline {subsection}{\numberline {4.2.9}Frequency filtering}{61} \contentsline {subsection}{\numberline {4.2.10}Histograms and LUTs}{62} \contentsline {subsection}{\numberline {4.2.11}Morphology}{62} \contentsline {subsection}{\numberline {4.2.12}Mosaicing}{64} \contentsline {subsection}{\numberline {4.2.13}Other}{64} \contentsline {subsection}{\numberline {4.2.14}IO functions}{67}