peters_r@mscf.med.upenn.edu (01/24/91)
Recently, I ran into problems with slow drawing during my drag and
Piupdate operations and decided to switch to copyBitting bitmaps instead of
Drawpicturing pictures. To my surprise, I could find no evidence of a Toolbox
routine to change pictures into bitmaps. So here is one I wrote:
BitMap *
PictureToBitMap( thePicture )
PicHandle thePicture;
{
GrafPtr tempPort = (GrafPtr) NewPtr(sizeof(GrafPort));
GrafPtr savePort;
Rect r;
int theID;
BitMap map;
GetPort( &savePort );
/* Create an off-screen grafport in which to draw the picture. */
OpenPort( tempPort );
/* Make sure that the structure, boundary, and size of the bitmap correspond
to the picture we're going to draw. */
r = (**thePicture).picFrame;
map.bounds = r;
map.rowBytes = (((r.right - r.left) +15) /16) *2;
map.baseAddr = NewPtr( map.rowBytes * (r.bottom - r.top +1));
SetPortBits( &map );
/* Make sure the port rectangle of our off-screen grafport is the same as the
the picture frame. */
PortSize((r.right - r.left), (r.bottom - r.top));
SetPortBits( &map );
/* Drawing the picture will now alter our bitmap, and we'll capture the bit
pattern we want. */
ClipRect( &tempPort->portRect );
EraseRect( &tempPort->portRect );
DrawPicture( thePicture, &r );
/* Clean up after ourselves. */
SetPort( savePort );
ClosePort( tempPort );
DisposPtr( tempPort );
/* Return home triumphant with the trophy. */
return ↦
}
Please let me know if this works for you ( it works fine on a mac plus running
system 6.0.5 (with old-style QuickDraw?)). Also let me know if in your
references you find a more up-to-date Toolbox function which does this. l am
also always on the lookout for ways to improve efficientcy.
Thanks,
Randy Peters