Caution: This version of this document is no longer maintained. For the latest documentation, see


Create a transparency mask for an image


int PhMakeTransBitmap( PhImage_t *image,
                       PgColor_t trans_color );




This function creates a transparent bitmap or transparency mask for the given image, provided there isn't one already.

Note: PhMakeTransparent() is similar to PhMakeTransBitmap(), but PhMakeTransparent() uses chroma when possible; chroma is accelerated by most hardware, whereas transparency bitmaps are always implemented in software.

The meaning of the trans_color argument depends on the type of the image:

The trans_color argument is the color in the image's palette to be made transparent. If more than one entry in the palette contains this color, the first one found is used. You can pass an index into the palette as trans_color by ORing it with Pg_INDEX_COLOR. For example:
if ( PhMakeTransBitmap( my_image,
                        n | Pg_INDEX_COLOR ) == 0 )
The trans_color argument is the grey index (0-255 for BYTE, 0-15 for NIBBLE) to be made transparent.
The trans_color argument is the color to be made transparent, expressed as a PgColor_t.
The trans_color argument is interpreted as a short packed with the color information in the appropriate format (see PhImage_t).

The resulting bitmap is stored in the mask_bm member of the PhImage_t structure. This function sets the image's Ph_RELEASE_TRANSPARENCY_MASK flag.

To draw the image using the transparency mask, use PgDrawPhImage() or PgDrawPhImagemx().


An error occurred.


 * This is code for a PhAB application that demonstrates
 * how to make a transparency mask for an image.  This
 * also shows how to take that image and to put it into
 * a label widget and to draw it into a PtRaw's canvas.

/* Standard headers */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

/* Toolkit headers */
#include <Ph.h>
#include <Pt.h>
#include <Ap.h>

/* Local headers */
#include "abimport.h"
#include "proto.h"

ApDBase_t   *database;
PhImage_t   trans_image;

 * Setup function for the base window
base_window_setup( PtWidget_t *link_instance,
                   ApInfo_t *apinfo,
                   PtCallbackInfo_t *cbinfo )
    PhImage_t   *imgptr;

    // Get the original image from an image-type
    // label widget that we've put in a PhAB picture
    // module - don't close the database since we'll
    // still be using its image and palette data

    database = ApOpenDBase( ABM_our_picture_module );
    imgptr = ApGetImageRes( database, "image_label" );

    // Copy it so that we don't change the original
    // PhImage_t; we'll still be using the same image
    // and palette data though

    memcpy( &trans_image, imgptr, sizeof(PhImage_t) );

    // all white pixels will be transparent

    PhMakeTransBitmap( &trans_image, Pg_WHITE );

    // Put the image that contains the transparency mask
    // into another image-type label

    PtSetResource( ABW_destination_label,
       Pt_ARG_LABEL_IMAGE, &trans_image, 0 );

    /* eliminate 'unreferenced' warnings */
    link_instance = link_instance, apinfo = apinfo;
    cbinfo = cbinfo;

    return( Pt_CONTINUE );

 * Draw function (Pt_ARG_RAW_DRAW_F) for a PtRaw widget
raw_draw_f( PtWidget_t *widget, PhTile_t *damage )
    PhPoint_t   pos = {0, 0};
    PhRect_t    rect;

    damage = damage;

    PtSuperClassDraw( PtBasic, widget, damage );

    // Find our canvas
    PtCalcCanvas( widget, &rect );

    // Set translation so that drawing is relative to
    // the PtRaw widget, not its parent.
    PgSetTranslation( &rect.ul, Pg_RELATIVE );

    // Clip to our basic canvas (it's only polite).
    PtClipAdd( widget, &rect );

    // Do our drawing...
    PgDrawPhImagemx( &pos, &trans_image, 0 );

    // Remove our translation and clipping
    rect.ul.x *= -1; // subtract what we added above
    rect.ul.y *= -1;
    PgSetTranslation( &rect.ul, Pg_RELATIVE );



Interrupt handler No
Signal handler No
Thread No

See also:

PgColor_t, PgDrawPhImage*(), PgDrawPhImageRect*(), PgDrawRepPhImage*(), PhCreateImage(), PhImage_t, PhMakeTransparent()

Images in the Raw Drawing and Animation chapter of the Photon Programmer's Guide