Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Tk_FindPhoto(3) 	      Tk Library Procedures		 Tk_FindPhoto(3)

________________________________________________________________________________

NAME
     Tk_FindPhoto,  Tk_PhotoPutBlock,  Tk_PhotoPutZoomedBlock, Tk_PhotoGetImage,
     Tk_PhotoBlank, Tk_PhotoExpand, Tk_PhotoGetSize, Tk_PhotoSetSize  -  manipu-
     late the image data stored in a photo image.

SYNOPSIS
     #include <tk.h>

     Tk_PhotoHandle
     Tk_FindPhoto(interp, imageName)

     int
     Tk_PhotoPutBlock(interp, handle, blockPtr, x, y, width, height,compRule)

     int
     Tk_PhotoPutZoomedBlock(interp, handle, blockPtr, x, y, width, height,zoomX, zoomY, subsampleX, subsampleY, compRule)

     int
     Tk_PhotoGetImage(handle, blockPtr)

     void
     Tk_PhotoBlank(handle)

     int
     Tk_PhotoExpand(interp, handle, width, height)

     void
     Tk_PhotoGetSize(handle, widthPtr, heightPtr)

     int
     Tk_PhotoSetSize(interp. handle, width, height)

ARGUMENTS
     Tcl_Interp *interp (in)			  Interpreter in which image was
						  created and in which error re-
						  porting is to be done.

     const char *imageName (in) 		  Name of the photo image.

     Tk_PhotoHandle handle (in) 		  Opaque  handle identifying the
						  photo image to be affected.

     Tk_PhotoImageBlock *blockPtr (in)		  Specifies  the   address   and
						  storage layout of image data.

     int x (in) 				  Specifies   the  X  coordinate
						  where the top-left  corner  of
						  the  block  is  to  be  placed
						  within the image.

     int y (in) 				  Specifies  the  Y   coordinate
						  where  the  top-left corner of
						  the  block  is  to  be  placed
						  within the image.

     int width (in)				  Specifies the width of the im-
						  age  area  to be affected (for
						  Tk_PhotoPutBlock) or	the  de-
						  sired image width (for Tk_Pho-
						  toExpand and Tk_PhotoSetSize).

     int compRule (in)				  Specifies the compositing rule
						  used	when combining transpar-
						  ent pixels in a block of  data
						  with	a  photo image.  Must be
						  one	 of	TK_PHOTO_COMPOS-
						  ITE_OVERLAY  (which  puts  the
						  block of data over the top  of
						  the existing photo image, with
						  the  previous contents showing
						  through  in  the   transparent
						  bits)    or	TK_PHOTO_COMPOS-
						  ITE_SET  (which  discards  the
						  existing  photo image contents
						  in the  rectangle  covered  by
						  the data block.)

     int height (in)				  Specifies  the  height  of the
						  image area to be affected (for
						  Tk_PhotoPutBlock) or	the  de-
						  sired    image   height   (for
						  Tk_PhotoExpand  and  Tk_Photo-
						  SetSize).

     int *widthPtr (out)			  Pointer  to  location in which
						  to store the image width.

     int *heightPtr (out)			  Pointer to location  in  which
						  to store the image height.

     int subsampleX (in)			  Specifies the subsampling fac-
						  tor in the X direction for in-
						  put image data.

     int subsampleY (in)			  Specifies the subsampling fac-
						  tor in the Y direction for in-
						  put image data.

     int zoomX (in)				  Specifies  the  zoom factor to
						  be applied in the X  direction
						  to pixels being written to the
						  photo image.

     int zoomY (in)				  Specifies  the  zoom factor to
						  be applied in the Y  direction
						  to pixels being written to the
						  photo image.
________________________________________________________________________________

DESCRIPTION
     Tk_FindPhoto returns an opaque handle that is used to identify a particular
     photo  image to the other procedures.  The parameter is the name of the im-
     age, that is, the name specified to the image create photo command, or  as-
     signed by that command if no name was specified.  If imageName does not ex-
     ist or is not a photo image, Tk_FindPhoto returns NULL.

     Tk_PhotoPutBlock  is  used  to supply blocks of image data to be displayed.
     The call affects an area of the image of size width x height  pixels,  with
     its  top-left  corner at coordinates (x,y).  All of width, height, x, and y
     must be non-negative.  If part of this area lies outside the current bounds
     of the image, the image will be expanded to include the  area,  unless  the
     user  has	specified  an explicit image size with the -width and/or -height
     widget configuration options (see photo(n));  in  that  case  the	area  is
     silently clipped to the image boundaries.

     The block parameter is a pointer to a Tk_PhotoImageBlock structure, defined
     as follows:
	    typedef struct {
		unsigned char *pixelPtr;
		int width;
		int height;
		int pitch;
		int pixelSize;
		int offset[4];
	    } Tk_PhotoImageBlock;
     The  pixelPtr  field points to the first pixel, that is, the top-left pixel
     in the block.  The width and height fields specify the  dimensions  of  the
     block  of pixels.	The pixelSize field specifies the address difference be-
     tween two horizontally adjacent pixels.  It should be 4 for RGB and  2  for
     grayscale	image  data.   Other  values are possible, if the offsets in the
     offset array are adjusted accordingly (e.g. for red, green  and  blue  data
     stored  in different planes).  Using such a layout is strongly discouraged,
     though. Due to a bug, it might not work correctly if an  alpha  channel  is
     provided.	(see  the BUGS section below). The pitch field specifies the ad-
     dress difference between two vertically adjacent pixels.  The offset  array
     contains  the  offsets  from the address of a pixel to the addresses of the
     bytes containing the red, green, blue and alpha (transparency)  components.
     If  the offsets for red, green and blue are equal, the image is interpreted
     as grayscale. If they differ, RGB data is	assumed.  Normally  the  offsets
     will be 0, 1, 2, 3 for RGB data and 0, 0, 0, 1 for grayscale.  It is possi-
     ble  to  provide  image data without an alpha channel by setting the offset
     for alpha to a negative value and adjusting  the  pixelSize  field  accord-
     ingly. This use is discouraged, though (see the BUGS section below).

     The  compRule  parameter  to  Tk_PhotoPutBlock specifies a compositing rule
     that says what to do with transparent pixels.  The  value	TK_PHOTO_COMPOS-
     ITE_OVERLAY  says that the previous contents of the photo image should show
     through, and the value TK_PHOTO_COMPOSITE_SET says that the  previous  con-
     tents  of the photo image should be completely ignored, and the values from
     the block be copied directly across.  The behavior in Tk8.3 and earlier was
     equivalent to having TK_PHOTO_COMPOSITE_OVERLAY as a compositing rule.

     The value given for the width and height parameters to Tk_PhotoPutBlock  do
     not  have	to  correspond	to  the  values specified in block.  If they are
     smaller, Tk_PhotoPutBlock extracts a sub-block from  the  image  data  sup-
     plied.  If they are larger, the data given are replicated (in a tiled fash-
     ion)  to fill the specified area.	These rules operate independently in the
     horizontal and vertical directions.

     Tk_PhotoPutBlock normally returns TCL_OK, though if it cannot allocate suf-
     ficient memory to hold the resulting image, TCL_ERROR is  returned  instead
     and,  if the interp argument is non-NULL, an error message is placed in the
     interpreter's result.

     Tk_PhotoPutZoomedBlock works like Tk_PhotoPutBlock except	that  the  image
     can  be reduced or enlarged for display.  The subsampleX and subsampleY pa-
     rameters allow the size of the image to be reduced by subsampling.  Tk_Pho-
     toPutZoomedBlock will use only pixels from the input image whose X  coordi-
     nates are multiples of subsampleX, and whose Y coordinates are multiples of
     subsampleY.   For	example,  an  image  of 512x512 pixels can be reduced to
     256x256 by setting subsampleX and subsampleY to 2.

     The zoomX and zoomY parameters allow the image  to  be  enlarged  by  pixel
     replication.   Each  pixel of the (possibly subsampled) input image will be
     written to a block zoomX pixels wide and zoomY pixels high of the displayed
     image.  Subsampling and zooming can be used together for special effects.

     Tk_PhotoGetImage can be used to retrieve image data  from	a  photo  image.
     Tk_PhotoGetImage  fills in the structure pointed to by the blockPtr parame-
     ter with values that describe the address and layout of the image data that
     the photo image has stored internally.  The values are valid until the  im-
     age is destroyed or its size is changed.

     It  is possible to modify an image by writing directly to the data the pix-
     elPtr field points to. The size of the image cannot be  changed  this  way,
     though.  Also, changes made by writing directly to pixelPtr will not be im-
     mediately	visible,  but  only  after a call to Tk_ImageChanged or after an
     event that causes the interested widgets to redraw themselves.   For  these
     reasons  usually  it  is  preferable to make changes to a copy of the image
     data and write it back with Tk_PhotoPutBlock or Tk_PhotoPutZoomedBlock.

     Tk_PhotoGetImage returns 1 for compatibility with the corresponding  proce-
     dure in the old photo widget.

     Tk_PhotoBlank  blanks the entire area of the photo image.	Blank areas of a
     photo image are transparent.

     Tk_PhotoExpand requests that the widget's image be expanded to be at  least
     width  x  height  pixels in size.	The width and/or height are unchanged if
     the user has specified an explicit image width or height  with  the  -width
     and/or  -height configuration options, respectively.  If the image data are
     being supplied in many small blocks, it is more efficient to use  Tk_Photo-
     Expand  or  Tk_PhotoSetSize at the beginning rather than allowing the image
     to expand in many small increments as image blocks are supplied.

     Tk_PhotoExpand normally returns TCL_OK, though if it cannot allocate suffi-
     cient memory to hold the resulting image,	TCL_ERROR  is  returned  instead
     and,  if the interp argument is non-NULL, an error message is placed in the
     interpreter's result.

     Tk_PhotoSetSize specifies the size of the image, as if the user had  speci-
     fied the given width and height values to the -width and -height configura-
     tion  options.  A value of zero for width or height does not change the im-
     age's width or height, but allows the width or height to be changed by sub-
     sequent calls to Tk_PhotoPutBlock,  Tk_PhotoPutZoomedBlock  or  Tk_PhotoEx-
     pand.

     Tk_PhotoSetSize  normally returns TCL_OK, though if it cannot allocate suf-
     ficient memory to hold the resulting image, TCL_ERROR is  returned  instead
     and,  if the interp argument is non-NULL, an error message is placed in the
     interpreter's result.

     Tk_PhotoGetSize returns the  dimensions  of  the  image  in  *widthPtr  and
     *heightPtr.

PORTABILITY
     In Tk 8.3 and earlier, Tk_PhotoPutBlock and Tk_PhotoPutZoomedBlock had dif-
     ferent  signatures. If you want to compile code that uses the old interface
     against 8.4 without updating your code, compile it with the flag -DUSE_COM-
     POSITELESS_PHOTO_PUT_BLOCK.  Code linked using Stubs against older versions
     of Tk will continue to work.

     In Tk 8.4,  Tk_PhotoPutBlock,  Tk_PhotoPutZoomedBlock,  Tk_PhotoExpand  and
     Tk_PhotoSetSize  did not take an interp argument or return any result code.
     If insufficient memory was available for an image, Tk  would  panic.   This
     behaviour	is  still supported if you compile your extension with the addi-
     tional flag -DUSE_PANIC_ON_PHOTO_ALLOC_FAILURE.  Code  linked  using  Stubs
     against older versions of Tk will continue to work.

BUGS
     The Tk_PhotoImageBlock structure used to provide image data to Tk_PhotoPut-
     Block  promises  great flexibility in the layout of the data (e.g. separate
     planes for the red, green, blue and alpha	channels).   Unfortunately,  the
     implementation  fails to hold this promise.  The problem is that the pixel-
     Size field is (incorrectly) used to determine whether the image has an  al-
     pha  channel.   Currently,  if  the offset for the alpha channel is greater
     than or equal to pixelSize,  tk_PhotoPutblock  assumes  no  alpha	data  is
     present  and  makes  the  image  fully opaque.  This means that for layouts
     where the channels are separate (or any other exotic layout where pixelSize
     has to be smaller than the alpha offset), the alpha  channel  will  not  be
     read correctly.  In order to be on the safe side if this issue will be cor-
     rected  in  a future release, it is strongly recommended you always provide
     alpha data - even if the image has no  transparency  -  and  only	use  the
     "standard"  layout  with  a pixelSize of 2 for grayscale and 4 for RGB data
     with offsets of 0, 0, 0, 1 or 0, 1, 2, 3 respectively.

CREDITS
     The code for the photo image type was developed by Paul Mackerras, based on
     his earlier photo widget code.

KEYWORDS
     photo, image

Tk				       8.0			 Tk_FindPhoto(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=Tk_PhotoGetSize.tk86&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help