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

FreeBSD Manual Pages

  
 
  

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

________________________________________________________________________________

NAME
     Tk_CreatePhotoImageFormat - define new file format for photo images

SYNOPSIS
     #include <tk.h>

     Tk_CreatePhotoImageFormat(formatPtr)

ARGUMENTS
     const Tk_PhotoImageFormat *formatPtr (in)		Structure  that  defines
							the new file format.
________________________________________________________________________________

DESCRIPTION
     Tk_CreatePhotoImageFormat is invoked to define a new file format for  image
     data  for	use  with  photo images.  The code that implements an image file
     format is called an image file format handler, or handler for  short.   The
     photo  image code maintains a list of handlers that can be used to read and
     write data to or from a file.  Some handlers may also support reading image
     data from a string or converting image data to a string format.   The  user
     can  specify  which handler to use with the -format image configuration op-
     tion or the -format option to the read and write photo image subcommands.

     An image file format handler consists of a collection of procedures plus  a
     Tk_PhotoImageFormat  structure,  which  contains the name of the image file
     format and pointers to six procedures provided by the handler to deal  with
     files  and  strings in this format.  The Tk_PhotoImageFormat structure con-
     tains the following fields:
	    typedef struct Tk_PhotoImageFormat {
		const char *name;
		Tk_ImageFileMatchProc *fileMatchProc;
		Tk_ImageStringMatchProc *stringMatchProc;
		Tk_ImageFileReadProc *fileReadProc;
		Tk_ImageStringReadProc *stringReadProc;
		Tk_ImageFileWriteProc *fileWriteProc;
		Tk_ImageStringWriteProc *stringWriteProc;
	    } Tk_PhotoImageFormat;

     The handler need not provide implementations of all  six  procedures.   For
     example, the procedures that handle string data would not be provided for a
     format  in  which	the image data are stored in binary, and could therefore
     contain null characters.  If any procedure is not implemented,  the  corre-
     sponding  pointer	in  the  Tk_PhotoImageFormat  structure should be set to
     NULL.  The handler must provide the fileMatchProc procedure if it	provides
     the  fileReadProc	procedure,  and the stringMatchProc procedure if it pro-
     vides the stringReadProc procedure.

   NAME
     formatPtr->name provides a name for the image type.  Once Tk_CreatePhotoIm-
     ageFormat returns, this name may be used in the -format photo image config-
     uration and subcommand  option.   The  manual  page  for  the  photo  image
     (photo(n)) describes how image file formats are chosen based on their names
     and  the  value  given  to  the -format option. The first character of for-
     matPtr->name must not be an uppercase character from  the	ASCII  character
     set  (that  is,  one  of the characters A-Z).  Such names are used only for
     legacy interface support (see below).

   FILEMATCHPROC
     formatPtr->fileMatchProc provides the address of a procedure for Tk to call
     when it is searching for an image file format handler suitable for  reading
     data  in  a  given file.  formatPtr->fileMatchProc must match the following
     prototype:
	    typedef int Tk_ImageFileMatchProc(
		    Tcl_Channel chan,
		    const char *fileName,
		    Tcl_Obj *format,
		    int *widthPtr,
		    int *heightPtr,
		    Tcl_Interp *interp);
     The fileName argument is the name of the file containing  the  image  data,
     which  is open for reading as chan.  The format argument contains the value
     given for the -format option, or NULL if the option was not specified.   If
     the data in the file appears to be in the format supported by this handler,
     the formatPtr->fileMatchProc procedure should store the width and height of
     the  image  in *widthPtr and *heightPtr respectively, and return 1.  Other-
     wise it should return 0.

   STRINGMATCHPROC
     formatPtr->stringMatchProc provides the address of a procedure  for  Tk  to
     call when it is searching for an image file format handler for suitable for
     reading  data  from  a given string.  formatPtr->stringMatchProc must match
     the following prototype:
	    typedef int Tk_ImageStringMatchProc(
		    Tcl_Obj *data,
		    Tcl_Obj *format,
		    int *widthPtr,
		    int *heightPtr,
		    Tcl_Interp *interp);
     The data argument points to the object containing the image data.	The for-
     mat argument contains the value given for the -format option,  or	NULL  if
     the  option  was not specified.  If the data in the string appears to be in
     the format supported by this handler, the formatPtr->stringMatchProc proce-
     dure should store the width and  height  of  the  image  in  *widthPtr  and
     *heightPtr respectively, and return 1.  Otherwise it should return 0.

   FILEREADPROC
     formatPtr->fileReadProc  provides the address of a procedure for Tk to call
     to read data from an image file into a photo  image.   formatPtr->fileRead-
     Proc must match the following prototype:
	    typedef int Tk_ImageFileReadProc(
		    Tcl_Interp *interp,
		    Tcl_Channel chan,
		    const char *fileName,
		    Tcl_Obj *format,
		    PhotoHandle imageHandle,
		    int destX, int destY,
		    int width, int height,
		    int srcX, int srcY);
     The  interp argument is the interpreter in which the command was invoked to
     read the image; it should be used for reporting errors.  The image data  is
     in  the file named fileName, which is open for reading as chan.  The format
     argument contains the value given for the -format option, or  NULL  if  the
     option was not specified.	The image data in the file, or a subimage of it,
     is  to  be  read into the photo image identified by the handle imageHandle.
     The subimage of the data in the file is of dimensions width  x  height  and
     has  its top-left corner at coordinates (srcX,srcY).  It is to be stored in
     the photo image with its top-left corner at coordinates (destX,destY) using
     the Tk_PhotoPutBlock procedure.  The return value is a standard Tcl  return
     value.

   STRINGREADPROC
     formatPtr->stringReadProc	provides  the  address	of a procedure for Tk to
     call to read data from a string into a photo image.  formatPtr->stringRead-
     Proc must match the following prototype:
	    typedef int Tk_ImageStringReadProc(
		    Tcl_Interp *interp,
		    Tcl_Obj *data,
		    Tcl_Obj *format,
		    PhotoHandle imageHandle,
		    int destX, int destY,
		    int width, int height,
		    int srcX, int srcY);
     The interp argument is the interpreter in which the command was invoked  to
     read  the image; it should be used for reporting errors.  The data argument
     points to the image data in object form.  The format argument contains  the
     value  given  for	the -format option, or NULL if the option was not speci-
     fied.  The image data in the string, or a subimage of it,	is  to	be  read
     into the photo image identified by the handle imageHandle.  The subimage of
     the data in the string is of dimensions width x height and has its top-left
     corner  at  coordinates (srcX,srcY).  It is to be stored in the photo image
     with its top-left corner at coordinates (destX,destY) using the  Tk_PhotoP-
     utBlock procedure.  The return value is a standard Tcl return value.

   FILEWRITEPROC
     formatPtr->fileWriteProc provides the address of a procedure for Tk to call
     to  write data from a photo image to a file.  formatPtr->fileWriteProc must
     match the following prototype:
	    typedef int Tk_ImageFileWriteProc(
		    Tcl_Interp *interp,
		    const char *fileName,
		    Tcl_Obj *format,
		    Tk_PhotoImageBlock *blockPtr);
     The interp argument is the interpreter in which the command was invoked  to
     write the image; it should be used for reporting errors.  The image data to
     be written are in memory and are described by the Tk_PhotoImageBlock struc-
     ture  pointed to by blockPtr; see the manual page FindPhoto(3) for details.
     The fileName argument points to the string giving the name of the	file  in
     which  to	write  the  image  data.  The format argument contains the value
     given for the -format option, or NULL if the option was not specified.  The
     format string can contain extra characters after the name	of  the  format.
     If  appropriate, the formatPtr->fileWriteProc procedure may interpret these
     characters to specify further details about the  image  file.   The  return
     value is a standard Tcl return value.

   STRINGWRITEPROC
     formatPtr->stringWriteProc  provides  the	address of a procedure for Tk to
     call to translate image data from	a  photo  image  into  a  string.   for-
     matPtr->stringWriteProc must match the following prototype:
	    typedef int Tk_ImageStringWriteProc(
		    Tcl_Interp *interp,
		    Tcl_Obj *format,
		    Tk_PhotoImageBlock *blockPtr);
     The  interp argument is the interpreter in which the command was invoked to
     convert the image; it should be used for reporting errors.  The image  data
     to  be  converted are in memory and are described by the Tk_PhotoImageBlock
     structure pointed to by blockPtr; see the manual page FindPhoto(3) for  de-
     tails.  The data for the string should be put in the interpreter interp re-
     sult.  The format argument contains the value given for the -format option,
     or NULL if the option was not specified.  The format string can contain ex-
     tra  characters  after  the  name	of the format.	If appropriate, the for-
     matPtr->stringWriteProc procedure may interpret these characters to specify
     further details about the image file.  The return value is a  standard  Tcl
     return value.

LEGACY INTERFACE SUPPORT
     In  Tk  8.2  and  earlier, the definition of all the function pointer types
     stored in fields of a Tk_PhotoImageFormat struct were incompatibly  differ-
     ent.   Legacy  programs and libraries dating from those days may still con-
     tain code that defines extended Tk photo image formats using the old inter-
     face.  The Tk header file will still support this legacy interface  if  the
     code  is compiled with the macro USE_OLD_IMAGE defined.  Alternatively, the
     legacy interfaces are used if the first character of formatPtr->name is  an
     uppercase ASCII character (A-Z), and explicit casts are used to forgive the
     type mismatch.  For example,
	    static Tk_PhotoImageFormat myFormat = {
		"MyFormat",
		(Tk_ImageFileMatchProc *) FileMatch,
		NULL,
		(Tk_ImageFileReadProc *) FileRead,
		NULL,
		NULL,
		NULL
	    };
     would  define a minimal Tk_PhotoImageFormat that operates provide only file
     reading capability, where FileMatch and FileRead are written  according  to
     the legacy interfaces of Tk 8.2 or earlier.

     Any stub-enabled extension providing an extended photo image format via the
     legacy  interface	enabled  by  the  USE_OLD_IMAGE  macro	that is compiled
     against Tk 8.5 headers and linked against the Tk 8.5 stub library will pro-
     duce a file that can be loaded only into interps with Tk 8.5 or later; that
     is, the normal stub-compatibility rules.  If a developer needs to	generate
     from such code a file that is loadable into interps with Tk 8.4 or earlier,
     they must use Tk 8.4 headers and stub libraries to do so.

     Any  new  code  written today should not make use of the legacy interfaces.
     Expect their support to go away in Tk 9.

SEE ALSO
     Tk_FindPhoto, Tk_PhotoPutBlock

KEYWORDS
     photo image, image file

Tk				       8.5	    Tk_CreatePhotoImageFormat(3)

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

home | help