photo.n
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:20k
- '"
- '" Copyright (c) 1994 The Australian National University
- '" Copyright (c) 1994-1997 Sun Microsystems, Inc.
- '"
- '" See the file "license.terms" for information on usage and redistribution
- '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- '"
- '" Author: Paul Mackerras (paulus@cs.anu.edu.au),
- '" Department of Computer Science,
- '" Australian National University.
- '"
- '" RCS: @(#) $Id: photo.n,v 1.14.2.5 2007/06/05 12:58:18 dkf Exp $
- '"
- .so man.macros
- .TH photo n 4.0 Tk "Tk Built-In Commands"
- .BS
- '" Note: do not modify the .SH NAME line immediately below!
- .SH NAME
- photo - Full-color images
- .SH SYNOPSIS
- fBimage create photo fR?fInamefR? ?fIoptionsfR?
- .BE
- .SH DESCRIPTION
- .PP
- A photo is an image whose pixels can display any color or be
- transparent. A photo image is stored internally in full color (32
- bits per pixel), and is displayed using dithering if necessary. Image
- data for a photo image can be obtained from a file or a string, or it
- can be supplied from
- C code through a procedural interface. At present, only GIF and PPM/PGM
- formats are supported, but an interface exists to allow additional
- image file formats to be added easily. A photo image is transparent
- in regions where no image data has been supplied
- .VS 8.4
- or where it has been set transparent by the fBtransparency setfR
- subcommand.
- .VE 8.4
- .SH "CREATING PHOTOS"
- .PP
- Like all images, photos are created using the fBimage createfR
- command.
- Photos support the following fIoptionsfR:
- .TP
- fB-data fIstringfR
- Specifies the contents of the image as a string. The string should
- contain binary data or, for some formats, base64-encoded data (this is
- currently guaranteed to be supported for GIF images). The format of the
- string must be one of those for which there is an image file format
- handler that will accept string data. If both the fB-datafR
- and fB-filefR options are specified, the fB-filefR option takes
- precedence.
- .TP
- fB-format fIformat-namefR
- Specifies the name of the file format for the data specified with the
- fB-datafR or fB-filefR option.
- .TP
- fB-file fInamefR
- fInamefR gives the name of a file that is to be read to supply data
- for the photo image. The file format must be one of those for which
- there is an image file format handler that can read data.
- .TP
- fB-gamma fIvaluefR
- Specifies that the colors allocated for displaying this image in a
- window should be corrected for a non-linear display with the specified
- gamma exponent value. (The intensity produced by most
- CRT displays is a power function of the input value, to a good
- approximation; gamma is the exponent and is typically around 2).
- The value specified must be greater than zero. The default
- value is one (no correction). In general, values greater than one
- will make the image lighter, and values less than one will make it
- darker.
- .TP
- fB-height fInumberfR
- Specifies the height of the image, in pixels. This option is useful
- primarily in situations where the user wishes to build up the contents
- of the image piece by piece. A value of zero (the default) allows the
- image to expand or shrink vertically to fit the data stored in it.
- .TP
- fB-palette fIpalette-specfR
- Specifies the resolution of the color cube to be allocated for
- displaying this image, and thus the number of colors used from the
- colormaps of the windows where it is displayed. The
- fIpalette-specfR string may be either a single decimal number,
- specifying the number of shades of gray to use, or three decimal
- numbers separated by slashes (/), specifying the number of shades of
- red, green and blue to use, respectively. If the first form (a single
- number) is used, the image will be displayed in monochrome (i.e.,
- grayscale).
- .TP
- fB-width fInumberfR
- Specifies the width of the image, in pixels. This option is useful
- primarily in situations where the user wishes to build up the contents
- of the image piece by piece. A value of zero (the default) allows the
- image to expand or shrink horizontally to fit the data stored in it.
- .SH "IMAGE COMMAND"
- .PP
- When a photo image is created, Tk also creates a new command
- whose name is the same as the image.
- This command may be used to invoke various operations
- on the image.
- It has the following general form:
- .CS
- fIimageName option fR?fIarg arg ...fR?
- .CE
- fIOptionfR and the fIargfRs
- determine the exact behavior of the command.
- .PP
- Those options that write data to the image generally expand the size
- of the image, if necessary, to accommodate the data written to the
- image, unless the user has specified non-zero values for the
- fB-widthfR and/or fB-heightfR configuration options, in which
- case the width and/or height, respectively, of the image will not be
- changed.
- .PP
- The following commands are possible for photo images:
- .TP
- fIimageName fBblankfR
- Blank the image; that is, set the entire image to have no data, so it
- will be displayed as transparent, and the background of whatever
- window it is displayed in will show through.
- .TP
- fIimageName fBcgetfR fIoptionfR
- Returns the current value of the configuration option given
- by fIoptionfR.
- fIOptionfR may have any of the values accepted by the
- fBimage create photofR command.
- .TP
- fIimageName fBconfigurefR ?fIoptionfR? ?fIvalue option value ...fR?
- Query or modify the configuration options for the image.
- If no fIoptionfR is specified, returns a list describing all of
- the available options for fIimageNamefR (see fBTk_ConfigureInfofR for
- information on the format of this list). If fIoptionfR is specified
- with no fIvaluefR, then the command returns a list describing the
- one named option (this list will be identical to the corresponding
- sublist of the value returned if no fIoptionfR is specified). If
- one or more fIoption-valuefR pairs are specified, then the command
- modifies the given option(s) to have the given value(s); in
- this case the command returns an empty string.
- fIOptionfR may have any of the values accepted by the
- fBimage create photofR command.
- .TP
- fIimageName fBcopyfR fIsourceImagefR ?fIoption value(s) ...fR?
- Copies a region from the image called fIsourceImagefR (which must
- be a photo image) to the image called fIimageNamefR, possibly with
- pixel zooming and/or subsampling. If no options are specified, this
- command copies the whole of fIsourceImagefR into fIimageNamefR,
- starting at coordinates (0,0) in fIimageNamefR. The following
- options may be specified:
- .RS
- .TP
- fB-from fIx1 y1 x2 y2fR
- Specifies a rectangular sub-region of the source image to be copied.
- (fIx1,y1fR) and (fIx2,y2fR) specify diagonally opposite corners of
- the rectangle. If fIx2fR and fIy2fR are not specified, the
- default value is the bottom-right corner of the source image. The
- pixels copied will include the left and top edges of the specified
- rectangle but not the bottom or right edges. If the fB-fromfR
- option is not given, the default is the whole source image.
- .TP
- fB-to fIx1 y1 x2 y2fR
- Specifies a rectangular sub-region of the destination image to be
- affected. (fIx1,y1fR) and (fIx2,y2fR) specify diagonally opposite
- corners of the rectangle. If fIx2fR and fIy2fR are not specified,
- the default value is (fIx1,y1fR) plus the size of the source
- region (after subsampling and zooming, if specified). If fIx2fR and
- fIy2fR are specified, the source region will be replicated if
- necessary to fill the destination region in a tiled fashion.
- .TP
- fB-shrinkfR
- Specifies that the size of the destination image should be reduced, if
- necessary, so that the region being copied into is at the bottom-right
- corner of the image. This option will not affect the width or height
- of the image if the user has specified a non-zero value for the
- fB-widthfR or fB-heightfR configuration option, respectively.
- .TP
- fB-zoom fIx yfR
- Specifies that the source region should be magnified by a factor of
- fIxfR in the X direction and fIyfR in the Y direction. If fIyfR
- is not given, the default value is the same as fIxfR. With this
- option, each pixel in the source image will be expanded into a block
- of fIxfR x fIyfR pixels in the destination image, all the same
- color. fIxfR and fIyfR must be greater than 0.
- .TP
- fB-subsample fIx yfR
- Specifies that the source image should be reduced in size by using
- only every fIxfRth pixel in the X direction and fIyfRth pixel in
- the Y direction. Negative values will cause the image to be flipped
- about the Y or X axes, respectively. If fIyfR is not given, the
- default value is the same as fIxfR.
- .TP
- fB-compositingrule fIrulefR
- .VS 8.4
- Specifies how transparent pixels in the source image are combined with
- the destination image. When a compositing rule of fIoverlayfR is
- set, the old contents of the destination image are visible, as if the
- source image were printed on a piece of transparent film and placed
- over the top of the destination. When a compositing rule of fIsetfR
- is set, the old contents of the destination image are discarded and
- the source image is used as-is. The default compositing rule is
- fIoverlayfR.
- .VE 8.4
- .RE
- .TP
- fIimageName fBdata ?fIoption value(s) ...fR?
- Returns image data in the form of a string. The following options
- may be specified:
- .RS
- .TP
- fB-backgroundfI colorfR
- If the color is specified, the data will not contain any transparency
- information. In all transparent pixels the color will be replaced by
- the specified color.
- .TP
- fB-formatfI format-namefR
- Specifies the name of the image file format handler to be used.
- Specifically, this subcommand searches
- for the first handler whose name matches an initial substring of
- fIformat-namefR and which has the capability to read this image data.
- If this option is not given, this subcommand uses the first
- handler that has the capability to read the image data.
- .TP
- fB-from fIx1 y1 x2 y2fR
- Specifies a rectangular region of fIimageNamefR to be returned.
- If only fIx1fR and fIy1fR are specified, the region
- extends from fI(x1,y1)fR to the bottom-right corner of
- fIimageNamefR. If all four coordinates are given, they specify
- diagonally opposite corners of the rectangular region, including x1,y1
- and excluding x2,y2. The default, if this option is not given, is the
- whole image.
- .TP
- fB-grayscalefR
- If this options is specified, the data will not contain color
- information. All pixel data will be transformed into grayscale.
- .RE
- .TP
- fIimageName fBgetfR fIx yfR
- Returns the color of the pixel at coordinates (fIxfR,fIyfR) in the
- image as a list of three integers between 0 and 255, representing the
- red, green and blue components respectively.
- .TP
- fIimageName fBputfR fIdatafR ?fIoption value(s) ...fR?
- Sets pixels in fI imageNamefR to the data specified in fIdatafR.
- This command first searches the list of image file format handlers for
- a handler that can interpret the data in fIdatafR, and then reads
- the image encoded within into fIimageNamefR (the destination image).
- If fIdatafR does not match any known format, an attempt to interpret
- it as a (top-to-bottom) list of scan-lines is made, with each
- scan-line being a (left-to-right) list of pixel colors (see
- fBTk_GetColorfR for a description of valid colors.) Every scan-line
- must be of the same length. Note that when fIdatafR is a single
- color name, you are instructing Tk to fill a rectangular region with
- that color. The following options may be specified:
- .RS
- .TP
- fB-format fIformat-namefR
- Specifies the format of the image data in fIdatafR.
- Specifically, only image file format handlers whose names begin with
- fIformat-namefR will be used while searching for an image data
- format handler to read the data.
- .TP
- fB-to fIx1 y1fR ?fIx2 y2fR?
- Specifies the coordinates of the top-left corner (fIx1fR,fIy1fR)
- of the region of fIimageNamefR into which data from fIfilenamefR
- are to be read. The default is (0,0). If fIx2fR,fIy2fR is given
- and fIdatafR is not large enough to cover the rectangle specified by
- this option, the image data extracted will be tiled so it covers the
- entire destination rectangle. Note that if fIdatafR specifies a
- single color value, then a region extending to the bottom-right corner
- represented by (fIx2fR,fIy2fR) will be filled with that color.
- .RE
- .TP
- fIimageName fBreadfR fIfilenamefR ?fIoption value(s) ...fR?
- Reads image data from the file named fIfilenamefR into the image.
- This command first searches the list of
- image file format handlers for a handler that can interpret the data
- in fIfilenamefR, and then reads the image in fIfilenamefR into
- fIimageNamefR (the destination image). The following options may be
- specified:
- .RS
- .TP
- fB-format fIformat-namefR
- Specifies the format of the image data in fIfilenamefR.
- Specifically, only image file format handlers whose names begin with
- fIformat-namefR will be used while searching for an image data
- format handler to read the data.
- .TP
- fB-from fIx1 y1 x2 y2fR
- Specifies a rectangular sub-region of the image file data to be copied
- to the destination image. If only fIx1fR and fIy1fR are
- specified, the region extends from (fIx1,y1fR) to the bottom-right
- corner of the image in the image file. If all four coordinates are
- specified, they specify diagonally opposite corners or the region.
- The default, if this option is not specified, is the whole of the
- image in the image file.
- .TP
- fB-shrinkfR
- If this option, the size of fIimageNamefR will be reduced, if
- necessary, so that the region into which the image file data are read
- is at the bottom-right corner of the fIimageNamefR. This option
- will not affect the width or height of the image if the user has
- specified a non-zero value for the fB-widthfR or fB-heightfR
- configuration option, respectively.
- .TP
- fB-to fIx yfR
- Specifies the coordinates of the top-left corner of the region of
- fIimageNamefR into which data from fIfilenamefR are to be read.
- The default is (0,0).
- .RE
- .TP
- fIimageName fBreditherfR
- The dithering algorithm used in displaying photo images propagates
- quantization errors from one pixel to its neighbors.
- If the image data for fIimageNamefR is supplied in pieces, the
- dithered image may not be exactly correct. Normally the difference is
- not noticeable, but if it is a problem, this command can be used to
- recalculate the dithered image in each window where the image is
- displayed.
- .TP
- fIimageName fBtransparency fIsubcommand ?arg arg ...?fR
- .VS 8.4
- Allows examination and manipulation of the transparency information in
- the photo image. Several subcommands are available:
- .RS
- .TP
- fIimageName fBtransparency get fIx yfR
- Returns a boolean indicating if the pixel at (fIxfR,fIyfR) is
- transparent.
- .TP
- fIimageName fBtransparency set fIx y booleanfR
- Makes the pixel at (fIxfR,fIyfR) transparent if fIbooleanfR is
- true, and makes that pixel opaque otherwise.
- .RE
- .VE 8.4
- .TP
- fIimageName fBwrite fIfilenamefR ?fIoption value(s) ...fR?
- Writes image data from fIimageNamefR to a file named fIfilenamefR.
- The following options may be specified:
- .RS
- .TP
- fB-backgroundfI colorfR
- If the color is specified, the data will not contain any transparency
- information. In all transparent pixels the color will be replaced by
- the specified color.
- .TP
- fB-formatfI format-namefR
- Specifies the name of the image file format handler to be used to
- write the data to the file. Specifically, this subcommand searches
- for the first handler whose name matches an initial substring of
- fIformat-namefR and which has the capability to write an image
- file. If this option is not given, this subcommand uses the first
- handler that has the capability to write an image file.
- .TP
- fB-from fIx1 y1 x2 y2fR
- Specifies a rectangular region of fIimageNamefR to be written to the
- image file. If only fIx1fR and fIy1fR are specified, the region
- extends from fI(x1,y1)fR to the bottom-right corner of
- fIimageNamefR. If all four coordinates are given, they specify
- diagonally opposite corners of the rectangular region. The default,
- if this option is not given, is the whole image.
- .TP
- fB-grayscalefR
- If this options is specified, the data will not contain color
- information. All pixel data will be transformed into grayscale.
- .RE
- .SH "IMAGE FORMATS"
- .PP
- The photo image code is structured to allow handlers for additional
- image file formats to be added easily. The photo image code maintains
- a list of these handlers. Handlers are added to the list by
- registering them with a call to fBTk_CreatePhotoImageFormatfR. The
- standard Tk distribution comes with handlers for PPM/PGM and GIF formats,
- which are automatically registered on initialization.
- .PP
- When reading an image file or processing
- string data specified with the fB-datafR configuration option, the
- photo image code invokes each handler in turn until one is
- found that claims to be able to read the data in the file or string.
- Usually this will find the correct handler, but if it doesn't, the
- user may give a format name with the fB-formatfR option to specify
- which handler to use. In fact the photo image code will try those
- handlers whose names begin with the string specified for the
- fB-formatfR option (the comparison is case-insensitive). For
- example, if the user specifies fB-format giffR, then a handler
- named GIF87 or GIF89 may be invoked, but a handler
- named JPEG may not (assuming that such handlers had been
- registered).
- .PP
- When writing image data to a file, the processing of the
- fB-formatfR option is slightly different: the string value given
- for the fB-formatfR option must begin with the complete name of the
- requested handler, and may contain additional information following
- that, which the handler can use, for example, to specify which variant
- to use of the formats supported by the handler.
- .VS 8.4
- Note that not all image handlers may support writing transparency data
- to a file, even where the target image format does.
- .VE 8.4
- .SH "COLOR ALLOCATION"
- .PP
- When a photo image is displayed in a window, the photo image code
- allocates colors to use to display the image and dithers the image, if
- necessary, to display a reasonable approximation to the image using
- the colors that are available. The colors are allocated as a color
- cube, that is, the number of colors allocated is the product of the
- number of shades of red, green and blue.
- .PP
- Normally, the number of
- colors allocated is chosen based on the depth of the window. For
- example, in an 8-bit PseudoColor window, the photo image code will
- attempt to allocate seven shades of red, seven shades of green and
- four shades of blue, for a total of 198 colors. In a 1-bit StaticGray
- (monochrome) window, it will allocate two colors, black and white. In
- a 24-bit DirectColor or TrueColor window, it will allocate 256 shades
- each of red, green and blue. Fortunately, because of the way that
- pixel values can be combined in DirectColor and TrueColor windows,
- this only requires 256 colors to be allocated. If not all of the
- colors can be allocated, the photo image code reduces the number of
- shades of each primary color and tries again.
- .PP
- The user can exercise some control over the number of colors that a
- photo image uses with the fB-palettefR configuration option. If
- this option is used, it specifies the maximum number of shades of
- each primary color to try to allocate. It can also be used to force
- the image to be displayed in shades of gray, even on a color display,
- by giving a single number rather than three numbers separated by
- slashes.
- .SH CREDITS
- .PP
- The photo image type was designed and implemented by Paul Mackerras,
- based on his earlier photo widget and some suggestions from
- John Ousterhout.
- .SH EXAMPLE
- Load an image from a file and tile it to the size of a window, which
- is useful for producing a tiled background:
- .CS
- # These lines should be called once
- fBimage create photofR untiled -file "theFile.ppm"
- fBimage create photofR tiled
- # These lines should be called whenever .someWidget changes
- # size; a <Configure> binding is useful here
- set width [winfo width .someWidget]
- set height [winfo height .someWidget]
- tiled fBcopyfR untiled -to 0 0 $width $height -shrink
- .CE
- .SH "SEE ALSO"
- image(n)
- .SH KEYWORDS
- photo, image, color