[comp.sys.mac.programmer] Offscreen bitmaps problem solved...

franco@bbn.com (Frank A. Lonigro) (12/13/88)

	Thanks again to all that responded, I have solved my offscreen
bitmap problem.  The reason I couldn't get it to work was because I was
using "NewWindow()" to create an offscreen grafport.  For some strange
reason using NewWindow broke something.  Anyway, the solution was to use
OpenPort to create and initialize the offscreen window.  Here is some
code fragments to initialize an offscreen bitmap with co-ordinates
(0, 0, 512, 512), much bigger than the standard Mac Plus screen.

#define drawLeft	0
#define	drawRight	512
#define	drawTop		0
#define	drawBottom	512

BitMap		offScreen_bitMap;
GrafPort 	offScreen_grafPort;
GrafPtr		offScreenPtr;

SetUpOffscreen()
{
	QDPtr baseAddr;
	short bitsRowBytes;
	long  bufferSize;
	GrafPtr oldPort;

	GetPort (&oldPort);

	offScreenPtr = &offScreen_grafPort;
	OpenPort (offScreenPtr);

	SetPort (offScreenPtr);

	bitsRowBytes = (((drawRight - drawLeft - 1) / 16) + 1) * 2;
	bufferSize = (drawBottom - drawTop) * bitsRowBytes;

	baseAddr = (QDPtr)NewPtr(bufferSize);

	offScreen_bitMap.baseAddr = baseAddr;
	offScreen_bitMap.rowBytes = bitsRowBytes;
	SetRect(&(offScreen_bitMap.bounds),drawLeft,drawTop,drawRight,drawBottom);

	SetPortBits (&offScreen_bitMap);
	EraseRect (&(offScreen_bitMap.bounds));
	SetPort (oldPort);
}

/* * * * * * * * * * * */

	Once you have set up your offscreen bitmap, remember that to copybits
to it you must do something like:

	CopyBits (&src->portBits, &offScreenPtr->portbits, 
		&src->rect, &dest->rect, srcCopy, nil);

or something close to that.  And remember to SetPort(offScreenPtr) when ever
you need to draw something off screen, such as using PlotIcon or DrawPicture
and then SetPort back to your visable screen or window when you want the
final display to be visable.

	Hope this helps out those of you who asked me to post my findings.

Thanks,
-franco

franco@bbn.com
franco%bbn.com@relay.cs.net
...!harvard!bbn!franco