Provided by: tk8.6-doc_8.6.8-4_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