elisp: Image Descriptors

 
 37.17.2 Image Descriptors
 -------------------------
 
 An “image descriptor” is a list which specifies the underlying data for
 an image, and how to display it.  It is typically used as the value of a
 ‘display’ overlay or text property (SeeOther Display Specs); but
 SeeShowing Images, for convenient helper functions to insert images
 into buffers.
 
    Each image descriptor has the form ‘(image . PROPS)’, where PROPS is
 a property list of alternating keyword symbols and values, including at
 least the pair ‘:type TYPE’ that specifies the image type.
 
    The following is a list of properties that are meaningful for all
 image types (there are also properties which are meaningful only for
 certain image types, as documented in the following subsections):
 
 ‘:type TYPE’
      The image type.  SeeImage Formats.  Every image descriptor
      must include this property.
 
 ‘:file FILE’
      This says to load the image from file FILE.  If FILE is not an
      absolute file name, it is expanded in ‘data-directory’.
 
 ‘:data DATA’
      This specifies the raw image data.  Each image descriptor must have
      either ‘:data’ or ‘:file’, but not both.
 
      For most image types, the value of a ‘:data’ property should be a
      string containing the image data.  Some image types do not support
      ‘:data’; for some others, ‘:data’ alone is not enough, so you need
      to use other image properties along with ‘:data’.  See the
      following subsections for details.
 
 ‘:margin MARGIN’
      This specifies how many pixels to add as an extra margin around the
      image.  The value, MARGIN, must be a non-negative number, or a pair
      ‘(X . Y)’ of such numbers.  If it is a pair, X specifies how many
      pixels to add horizontally, and Y specifies how many pixels to add
      vertically.  If ‘:margin’ is not specified, the default is zero.
 
 ‘:ascent ASCENT’
      This specifies the amount of the image’s height to use for its
      ascent—that is, the part above the baseline.  The value, ASCENT,
      must be a number in the range 0 to 100, or the symbol ‘center’.
 
      If ASCENT is a number, that percentage of the image’s height is
      used for its ascent.
 
      If ASCENT is ‘center’, the image is vertically centered around a
      centerline which would be the vertical centerline of text drawn at
      the position of the image, in the manner specified by the text
      properties and overlays that apply to the image.
 
      If this property is omitted, it defaults to 50.
 
 ‘:relief RELIEF’
      This adds a shadow rectangle around the image.  The value, RELIEF,
      specifies the width of the shadow lines, in pixels.  If RELIEF is
      negative, shadows are drawn so that the image appears as a pressed
      button; otherwise, it appears as an unpressed button.
 
 ‘:conversion ALGORITHM’
      This specifies a conversion algorithm that should be applied to the
      image before it is displayed; the value, ALGORITHM, specifies which
      algorithm.
 
      ‘laplace’
      ‘emboss’
           Specifies the Laplace edge detection algorithm, which blurs
           out small differences in color while highlighting larger
           differences.  People sometimes consider this useful for
           displaying the image for a disabled button.
 
      ‘(edge-detection :matrix MATRIX :color-adjust ADJUST)’
           Specifies a general edge-detection algorithm.  MATRIX must be
           either a nine-element list or a nine-element vector of
           numbers.  A pixel at position x/y in the transformed image is
           computed from original pixels around that position.  MATRIX
           specifies, for each pixel in the neighborhood of x/y, a factor
           with which that pixel will influence the transformed pixel;
           element 0 specifies the factor for the pixel at x-1/y-1,
           element 1 the factor for the pixel at x/y-1 etc., as shown
           below:
                  (x-1/y-1  x/y-1  x+1/y-1
                   x-1/y    x/y    x+1/y
                   x-1/y+1  x/y+1  x+1/y+1)
 
           The resulting pixel is computed from the color intensity of
           the color resulting from summing up the RGB values of
           surrounding pixels, multiplied by the specified factors, and
           dividing that sum by the sum of the factors’ absolute values.
 
           Laplace edge-detection currently uses a matrix of
                  (1  0  0
                   0  0  0
                   0  0 -1)
 
           Emboss edge-detection uses a matrix of
                  ( 2 -1  0
                   -1  0  1
                    0  1 -2)
 
      ‘disabled’
           Specifies transforming the image so that it looks disabled.
 
 ‘:mask MASK’
      If MASK is ‘heuristic’ or ‘(heuristic BG)’, build a clipping mask
      for the image, so that the background of a frame is visible behind
      the image.  If BG is not specified, or if BG is ‘t’, determine the
      background color of the image by looking at the four corners of the
      image, assuming the most frequently occurring color from the
      corners is the background color of the image.  Otherwise, BG must
      be a list ‘(RED GREEN BLUE)’ specifying the color to assume for the
      background of the image.
 
      If MASK is ‘nil’, remove a mask from the image, if it has one.
      Images in some formats include a mask which can be removed by
      specifying ‘:mask nil’.
 
 ‘:pointer SHAPE’
      This specifies the pointer shape when the mouse pointer is over
      this image.  SeePointer Shape, for available pointer shapes.
 
 ‘:map MAP’
      This associates an image map of “hot spots” with this image.
 
      An image map is an alist where each element has the format ‘(AREA
      ID PLIST)’.  An AREA is specified as either a rectangle, a circle,
      or a polygon.
 
      A rectangle is a cons ‘(rect . ((X0 . Y0) . (X1 . Y1)))’ which
      specifies the pixel coordinates of the upper left and bottom right
      corners of the rectangle area.
 
      A circle is a cons ‘(circle . ((X0 . Y0) . R))’ which specifies the
      center and the radius of the circle; R may be a float or integer.
 
      A polygon is a cons ‘(poly . [X0 Y0 X1 Y1 ...])’ where each pair in
      the vector describes one corner in the polygon.
 
      When the mouse pointer lies on a hot-spot area of an image, the
      PLIST of that hot-spot is consulted; if it contains a ‘help-echo’
      property, that defines a tool-tip for the hot-spot, and if it
      contains a ‘pointer’ property, that defines the shape of the mouse
      cursor when it is on the hot-spot.  SeePointer Shape, for
      available pointer shapes.
 
      When you click the mouse when the mouse pointer is over a hot-spot,
      an event is composed by combining the ID of the hot-spot with the
      mouse event; for instance, ‘[area4 mouse-1]’ if the hot-spot’s ID
      is ‘area4’.
 
  -- Function: image-mask-p spec &optional frame
      This function returns ‘t’ if image SPEC has a mask bitmap.  FRAME
      is the frame on which the image will be displayed.  FRAME ‘nil’ or
      omitted means to use the selected frame (SeeInput Focus).