Start Code/AlphaCompositing.c

// Graphics Importer and Exporter Samples
// This example takes two images and composites them together
// demonstrating the use of different graphic modes
// Originally written by Sam Bushell for QuickTime "Live" '99
// WWDC 2000 Introduction to QuickTime
 
#include "MacShell.h"
 
void AlphaComposite( void )
{
    OSErr err = noErr;
    Handle hOpenTypeList = NewHandle(0);
    long  numTypes = 0;
    FSSpec  theFSSpec;
    GraphicsImportComponent backgroundImporter = 0, foregroundImporter = 0;
    Rect backgroundBounds, windowBounds, foregroundBounds;
    WindowPtr window = NULL;
    MatrixRecord matrix;
    RGBColor whiteColor;
    FixedPoint backgroundCenter;
 
    BuildGraphicsImporterValidFileTypes( hOpenTypeList, &numTypes );
    HLock( hOpenTypeList );
    
    // prompt for a background image.
    err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
    if (err) goto bail;
    err = GetGraphicsImporterForFile( &theFSSpec, &backgroundImporter );
 
    // prompt for a foreground image.
    err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL);
    if (err) goto bail;
    err = GetGraphicsImporterForFile( &theFSSpec, &foregroundImporter );
    err = GraphicsImportGetNaturalBounds( backgroundImporter, &backgroundBounds );
    
    windowBounds = backgroundBounds;
    OffsetRect( &windowBounds, 10, 45 );
    window = NewCWindow( NULL, &windowBounds, "\pAlpha Composite", true, documentProc, (WindowPtr)-1, true, 0);
    
// Step 1. Insert DrawBackground.clp here...
 
    
    pause();
    
    // center the foreground image over the background image
    // get the native size of the foreground image
    // offset the image to center it
    // set the rectangle in which to draw an image
// Step 2. Insert CenterForeground.clp here...
    
    // draw the foreground image over the background image,
    // using the default graphics mode, ditherCopy.
    err = GraphicsImportSetGWorld( foregroundImporter, GetWindowPort( window ), NULL );
    err = GraphicsImportDraw( foregroundImporter );
 
    pause();
    
    // redraw the background.
    err = GraphicsImportDraw( backgroundImporter );
    
    // draw the foreground using the transparent graphics mode, with white transparent.
    whiteColor.red = 0xffff;
    whiteColor.green = 0xffff;
    whiteColor.blue = 0xffff;
// Step 3. Insert SetGraphicsMode.clp here...
 
    err = GraphicsImportDraw( foregroundImporter );
 
    pause();
    
    // redraw the background.
    err = GraphicsImportDraw( backgroundImporter );
    
    // draw the foreground using the straight alpha graphics mode.
// Step 4. Insert SetGraphicsModeAlpha.clp here...
 
    err = GraphicsImportDraw( foregroundImporter );
 
    pause();
    
    // redraw the background.
    err = GraphicsImportDraw( backgroundImporter );
    
    // draw the foreground *rotated 30 degrees*, using the straight alpha graphics mode.
// Step 5. Insert Rotate.clp here...
 
 
bail:
    if ( backgroundImporter ) CloseComponent( backgroundImporter );
    if ( foregroundImporter ) CloseComponent( foregroundImporter );
    if ( hOpenTypeList) DisposeHandle( hOpenTypeList );
}