Create a transparency mask for an image
int PhMakeTransBitmap( PhImage_t *image, PgColor_t trans_color );
ph
This function creates a transparent bitmap or transparency mask for the given image, provided there isn't one already.
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:
if ( PhMakeTransBitmap( my_image, n | Pg_INDEX_COLOR ) == 0 ) { … }
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().
/* * 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 */ int 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 */ void 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 ); PtClipRemove(); }
Photon
Safety: | |
---|---|
Interrupt handler | No |
Signal handler | No |
Thread | No |
PgColor_t, PgDrawPhImage*(), PgDrawPhImageRect*(), PgDrawRepPhImage*(), PhCreateImage(), PhImage_t, PhMakeTransparent()
“Images” in the Raw Drawing and Animation chapter of the Photon Programmer's Guide