Provided by: tk8.6-doc_8.6.12-1build1_all bug

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 option 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 contains 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 corresponding 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   provides   the
       stringReadProc procedure.

   NAME
       formatPtr->name  provides  a  name  for  the  image  type.  Once Tk_CreatePhotoImageFormat
       returns, this name may be used in the -format photo  image  configuration  and  subcommand
       option.  The manual page for the photo image (photo(3tk)) describes how image file formats
       are chosen based on their names and the value given  to  the  -format  option.  The  first
       character  of  formatPtr->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.  Otherwise
       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  format  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  procedure  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->fileReadProc 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->stringReadProc 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 specified.  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_PhotoPutBlock 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 structure pointed  to  by  blockPtr;  see  the
       manual page FindPhoto(3tk) 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.  formatPtr->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(3tk) for details.  The data for the string should be put in the
       interpreter interp result.  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->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  different.   Legacy  programs  and
       libraries dating from those days may still contain code that  defines  extended  Tk  photo
       image  formats using the old interface.  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 produce 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