mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	 7e6bbe1516
			
		
	
	
		7e6bbe1516
		
	
	
	
	
		
			
			as "This is the same format as used by gl.lrectwrite() and the imgfile module." This implies a certain byte order in multi-byte pixel formats. However, the code was originally written on an SGI (big-endian) and *uses* the fact that bytes are stored in a particular order in ints. This means that the code uses and produces different byte order on little-endian systems. This fix adds a module-level flag "backward_compatible" (default not set, and if not set, behaves as if set to 1--i.e. backward compatible) that can be used on a little-endian system to use the same byte order as the SGI. Using this flag it is then possible to prepare SGI-compatible images on a little-endian system. This patch is the result of a (small) discussion on python-dev and was submitted to SourceForge as patch #874358.
		
			
				
	
	
		
			100 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
| \section{\module{imageop} ---
 | |
|          Manipulate raw image data}
 | |
| 
 | |
| \declaremodule{builtin}{imageop}
 | |
| \modulesynopsis{Manipulate raw image data.}
 | |
| 
 | |
| 
 | |
| 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
 | |
| \function{gl.lrectwrite()} and the \refmodule{imgfile} module.
 | |
| 
 | |
| 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}
 | |
| 
 | |
| 
 | |
| \begin{funcdesc}{crop}{image, psize, width, height, x0, y0, x1, y1}
 | |
| Return the selected part of \var{image}, which should by
 | |
| \var{width} by \var{height} in size and consist of pixels of
 | |
| \var{psize} bytes. \var{x0}, \var{y0}, \var{x1} and \var{y1} are like
 | |
| 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.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{scale}{image, psize, width, height, newwidth, newheight}
 | |
| 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.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{tovideo}{image, psize, width, height}
 | |
| 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.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{grey2mono}{image, width, height, threshold}
 | |
| Convert a 8-bit deep greyscale image to a 1-bit deep image by
 | |
| thresholding all the pixels.  The resulting image is tightly packed and
 | |
| is probably only useful as an argument to \function{mono2grey()}.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{dither2mono}{image, width, height}
 | |
| Convert an 8-bit greyscale image to a 1-bit monochrome image using a
 | |
| (simple-minded) dithering algorithm.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{mono2grey}{image, width, height, p0, p1}
 | |
| 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.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{grey2grey4}{image, width, height}
 | |
| Convert an 8-bit greyscale image to a 4-bit greyscale image without
 | |
| dithering.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{grey2grey2}{image, width, height}
 | |
| Convert an 8-bit greyscale image to a 2-bit greyscale image without
 | |
| dithering.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{dither2grey2}{image, width, height}
 | |
| Convert an 8-bit greyscale image to a 2-bit greyscale image with
 | |
| dithering.  As for \function{dither2mono()}, the dithering algorithm
 | |
| is currently very simple.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{grey42grey}{image, width, height}
 | |
| Convert a 4-bit greyscale image to an 8-bit greyscale image.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{funcdesc}{grey22grey}{image, width, height}
 | |
| Convert a 2-bit greyscale image to an 8-bit greyscale image.
 | |
| \end{funcdesc}
 | |
| 
 | |
| \begin{datadesc}{backward_compatible}
 | |
| If set to 0, the functions in this module use a non-backward
 | |
| compatible way of representing multi-byte pixels on little-endian
 | |
| systems.  The SGI for which this module was originally written is a
 | |
| big-endian system, so setting this variable will have no effect.
 | |
| However, the code wasn't originally intended to run on anything else,
 | |
| so it made assumptions about byte order which are not universal.
 | |
| Setting this variable to 0 will cause the byte order to be reversed on
 | |
| little-endian systems, so that it then is the same as on big-endian
 | |
| systems.
 | |
| \end{datadesc}
 |