| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{imageop} --- | 
					
						
							| 
									
										
										
										
											1999-04-22 21:23:22 +00:00
										 |  |  |          Manipulate raw image data} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-04-22 21:23:22 +00:00
										 |  |  | \declaremodule{builtin}{imageop} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | \modulesynopsis{Manipulate raw image data.} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-04 07:15:02 +00:00
										 |  |  | The \module{imageop} module contains some useful operations on images. | 
					
						
							|  |  |  | It operates on images consisting of 8 or 32 bit pixels stored in | 
					
						
							|  |  |  | Python strings.  This is the same format as used by | 
					
						
							| 
									
										
										
										
											1999-04-22 21:23:22 +00:00
										 |  |  | \function{gl.lrectwrite()} and the \refmodule{imgfile} module. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The module defines the following variables and functions: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{error} | 
					
						
							|  |  |  | This exception is raised on all errors, such as unknown number of bits | 
					
						
							|  |  |  | per pixel, etc. | 
					
						
							|  |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{crop}{image, psize, width, height, x0, y0, x1, y1} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Return the selected part of \var{image}, which should by | 
					
						
							| 
									
										
										
										
											1995-03-13 10:03:32 +00:00
										 |  |  | \var{width} by \var{height} in size and consist of pixels of | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | \var{psize} bytes. \var{x0}, \var{y0}, \var{x1} and \var{y1} are like | 
					
						
							| 
									
										
										
										
											1998-04-04 07:15:02 +00:00
										 |  |  | the \function{gl.lrectread()} parameters, i.e.\ the boundary is | 
					
						
							|  |  |  | included in the new image.  The new boundaries need not be inside the | 
					
						
							|  |  |  | picture.  Pixels that fall outside the old image will have their value | 
					
						
							|  |  |  | set to zero.  If \var{x0} is bigger than \var{x1} the new image is | 
					
						
							|  |  |  | mirrored.  The same holds for the y coordinates. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{scale}{image, psize, width, height, newwidth, newheight} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Return \var{image} scaled to size \var{newwidth} by \var{newheight}. | 
					
						
							|  |  |  | No interpolation is done, scaling is done by simple-minded pixel | 
					
						
							|  |  |  | duplication or removal.  Therefore, computer-generated images or | 
					
						
							|  |  |  | dithered images will not look nice after scaling. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{tovideo}{image, psize, width, height} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Run a vertical low-pass filter over an image.  It does so by computing | 
					
						
							|  |  |  | each destination pixel as the average of two vertically-aligned source | 
					
						
							|  |  |  | pixels.  The main use of this routine is to forestall excessive | 
					
						
							|  |  |  | flicker if the image is displayed on a video device that uses | 
					
						
							|  |  |  | interlacing, hence the name. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{grey2mono}{image, width, height, threshold} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Convert a 8-bit deep greyscale image to a 1-bit deep image by | 
					
						
							| 
									
										
										
										
											2000-07-16 19:01:10 +00:00
										 |  |  | thresholding all the pixels.  The resulting image is tightly packed and | 
					
						
							| 
									
										
										
										
											1998-04-04 07:15:02 +00:00
										 |  |  | is probably only useful as an argument to \function{mono2grey()}. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{dither2mono}{image, width, height} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Convert an 8-bit greyscale image to a 1-bit monochrome image using a | 
					
						
							|  |  |  | (simple-minded) dithering algorithm. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{mono2grey}{image, width, height, p0, p1} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Convert a 1-bit monochrome image to an 8 bit greyscale or color image. | 
					
						
							|  |  |  | All pixels that are zero-valued on input get value \var{p0} on output | 
					
						
							|  |  |  | and all one-value input pixels get value \var{p1} on output.  To | 
					
						
							|  |  |  | convert a monochrome black-and-white image to greyscale pass the | 
					
						
							|  |  |  | values \code{0} and \code{255} respectively. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{grey2grey4}{image, width, height} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | Convert an 8-bit greyscale image to a 4-bit greyscale image without | 
					
						
							|  |  |  | dithering. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{grey2grey2}{image, width, height} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | Convert an 8-bit greyscale image to a 2-bit greyscale image without | 
					
						
							|  |  |  | dithering. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{dither2grey2}{image, width, height} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | Convert an 8-bit greyscale image to a 2-bit greyscale image with | 
					
						
							| 
									
										
										
										
											1998-04-04 07:15:02 +00:00
										 |  |  | dithering.  As for \function{dither2mono()}, the dithering algorithm | 
					
						
							|  |  |  | is currently very simple. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{grey42grey}{image, width, height} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | Convert a 4-bit greyscale image to an 8-bit greyscale image. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-17 06:33:25 +00:00
										 |  |  | \begin{funcdesc}{grey22grey}{image, width, height} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | Convert a 2-bit greyscale image to an 8-bit greyscale image. | 
					
						
							|  |  |  | \end{funcdesc} |