TweetFollow Us on Twitter

Oct 97 - Tips

Volume Number: 13 (1997)
Issue Number: 10
Column Tag: Tips & Tidbits

Tips & Tidbits

By Steve Sisak

Colorizing Pixmaps in PICT Images

In a progect I am working on, I have a set of PICT resources that are used to draw a background for my app's user interface. The PICT's are used to represent modular panels and the the user is allowed to colorize these backing panels. The code to colorize the backing pixmaps is relatively simple, but the Mac OS provides a gotcha.

The basic technique uses CopyBits to colorize the pixel data by setting the foreground and background colors of the destination port. The problem is that if you set the colors in the port before playing back the picture, the DrawPicture routine undoes your work for you and the pixel data from the PICT is not colorized. The following code uses the QuickDraw bottlenecks to circumvent the problem. To use it, call DrawColorizedPicture instead of DrawPicture and add the colorization colors you want as parameters.

For example:

  RGBColor red = {0xffff,0,0};
  RGBColor black = {0,0,0};
  Rect   bounds;

  // turn a grayscale image into a red-scale image:
  bounds = (**aPicHandle).bounds;
  DrawColorizedPicture(aPicHandle, &bounds, &black, &red);

Here is the code that implements DrawColorizedPicture:

// Define some global variables to pass the colorization information
RGBColor gFGColor;
RGBColor gBGColor;

// here is the overriden bottleneck (myQDBitsProcPtr).
// it sets up the color environment before actually coping the pixmap

pascal void myQDBitsProcPtr(BitMap *srcBits, Rect *srcRect, 
         Rect *dstRect, short mode, RgnHandle maskRgn)
{
  GrafPtr     curPort;
  RGBColor    saveFG;
  RGBColor    saveBG;

  GetPort(&curPort);  // get the context

  // save the fore- and background colors
  saveFG = ((CGrafPort*)curPort)->rgbFgColor;
  saveBG = ((CGrafPort*)curPort)->rgbBkColor;

  RGBForeColor(&gFGColor);  // set the foreground color
  RGBBackColor(&gBGColor);  // set the background color

  // call the standard routine
  StdBits(srcBits, srcRect, dstRect, mode, maskRgn);

  RGBForeColor(&saveFG);  // restore the foreground color
  RGBBackColor(&saveBG);  // restore the background color
}

// DrawColorizedPicture works just like DrawPicture, except it colorizes the
// the pixelmap portions of the picture according to the global variables
// gFGColor and gBGColor. It assumes the target port is a color port

pascal void DrawColorizedPicture(PicHandle ph, 
  Rect *targetBounds, RGBColor *fg, RGBColor *bg)
{
  CQDProcs     myProcs;        // new bottlenecks
  CQDProcs     *oldProcs;      // saved bottlenecks
  GrafPtr     curPort;         // the active GrafPort
  static QDBitsUPP theUPP = NULL;  // the UPP for our StdBits replacement


  if (theUPP == NULL) {    // allocate the UPP if it does not exist
    theUPP = NewQDBitsProc(myQDBitsProcPtr);
  }

  gFGColor = *fg;    // communicate colorization to the bottleneck
  gBGColor = *bg;
  GetPort(&curPort);      // find the current port
  SetStdCProcs(&myProcs); // initialize the bottleneck record
  myProcs.bitsProc = theUPP;  // insert our StdBits Bottleneck

  // save the previous Bottleneck record
  oldProcs = ((CGrafPort*)curPort)->grafProcs; 

  // attach our bottleneck record
  ((CGrafPort*)curPort)->grafProcs = &myProcs; 

  DrawPicture(ph, targetBounds);    // draw the picture

  // restore the bottlneck record
  ((CGrafPort*)curPort)->grafProcs = oldProcs; 
}

B.J. Buchalter
bj@metric-halo.com

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Latest Forum Discussions

See All


Price Scanner via MacPrices.net

Early Black Friday Deal: Apple’s newly upgrad...
Amazon has Apple 13″ MacBook Airs with M2 CPUs and 16GB of RAM on early Black Friday sale for $200 off MSRP, only $799. Their prices are the lowest currently available for these newly upgraded 13″ M2... Read more
13-inch 8GB M2 MacBook Airs for $749, $250 of...
Best Buy has Apple 13″ MacBook Airs with M2 CPUs and 8GB of RAM in stock and on sale on their online store for $250 off MSRP. Prices start at $749. Their prices are the lowest currently available for... Read more
Amazon is offering an early Black Friday $100...
Amazon is offering early Black Friday discounts on Apple’s new 2024 WiFi iPad minis ranging up to $100 off MSRP, each with free shipping. These are the lowest prices available for new minis anywhere... Read more
Price Drop! Clearance 14-inch M3 MacBook Pros...
Best Buy is offering a $500 discount on clearance 14″ M3 MacBook Pros on their online store this week with prices available starting at only $1099. Prices valid for online orders only, in-store... Read more
Apple AirPods Pro with USB-C on early Black F...
A couple of Apple retailers are offering $70 (28%) discounts on Apple’s AirPods Pro with USB-C (and hearing aid capabilities) this weekend. These are early AirPods Black Friday discounts if you’re... Read more
Price drop! 13-inch M3 MacBook Airs now avail...
With yesterday’s across-the-board MacBook Air upgrade to 16GB of RAM standard, Apple has dropped prices on clearance 13″ 8GB M3 MacBook Airs, Certified Refurbished, to a new low starting at only $829... Read more
Price drop! Apple 15-inch M3 MacBook Airs now...
With yesterday’s release of 15-inch M3 MacBook Airs with 16GB of RAM standard, Apple has dropped prices on clearance Certified Refurbished 15″ 8GB M3 MacBook Airs to a new low starting at only $999.... Read more
Apple has clearance 15-inch M2 MacBook Airs a...
Apple has clearance, Certified Refurbished, 15″ M2 MacBook Airs now available starting at $929 and ranging up to $410 off original MSRP. These are the cheapest 15″ MacBook Airs for sale today at... Read more
Apple drops prices on 13-inch M2 MacBook Airs...
Apple has dropped prices on 13″ M2 MacBook Airs to a new low of only $749 in their Certified Refurbished store. These are the cheapest M2-powered MacBooks for sale at Apple. Apple’s one-year warranty... Read more
Clearance 13-inch M1 MacBook Airs available a...
Apple has clearance 13″ M1 MacBook Airs, Certified Refurbished, now available for $679 for 8-Core CPU/7-Core GPU/256GB models. Apple’s one-year warranty is included, shipping is free, and each... Read more

Jobs Board

Seasonal Cashier - *Apple* Blossom Mall - J...
Seasonal Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Read more
Seasonal Fine Jewelry Commission Associate -...
…Fine Jewelry Commission Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) Read more
Seasonal Operations Associate - *Apple* Blo...
Seasonal Operations Associate - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Read more
Hair Stylist - *Apple* Blossom Mall - JCPen...
Hair Stylist - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Read more
Cashier - *Apple* Blossom Mall - JCPenney (...
Cashier - Apple Blossom Mall Location:Winchester, VA, United States (https://jobs.jcp.com/jobs/location/191170/winchester-va-united-states) - Apple Blossom Mall Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.