home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sys.mac.programmer
- Path: sparky!uunet!wupost!eclnews!cec1!ppc1
- From: ppc1@cec1.wustl.edu (Peter Pui Tak Chiu)
- Subject: Re: off-screen bitmap
- Message-ID: <1993Jan2.212030.27231@wuecl.wustl.edu>
- Sender: usenet@wuecl.wustl.edu (News Administrator)
- Nntp-Posting-Host: cec1
- Organization: Washington University, St. Louis MO
- References: <1993Jan2.062516.17378@wuecl.wustl.edu>
- Date: Sat, 2 Jan 1993 21:20:30 GMT
- Lines: 104
-
- In article <1993Jan2.062516.17378@wuecl.wustl.edu> ppc1@cec2.wustl.edu (Peter Pui Tak Chiu) writes:
- >hi everyone...
- >
- >i am trying to create an off-screen buffer in which i can draw in and then
- >copy the completed picture back to the screen. i have tried the following
- >method but it doesn't seem to work very well...
- >
- >i am using MPW.
- >
- >first of all, i create a BitMap of size 300 x 300 pixels in memory by the
- >following:
- >
- > move #11552,d0 ; size of BitMap
- > ; since rowWidth = 38, so each row has 304 bits
- > ; 304 x 304 / 8 = 11552 bytes
- > ext d0 ; extend to long word
- > _NewPtr ; get non-relocatable block of size 11552
- > move.l a0,BitMap.baseAddr ; set up BitMap base address
- > move #38,BitMap.rowBytes ; set up rowBytes
- > clr BitMap.bounds.Top ; set up bounding rectangle
- > clr BitMap.bounds.Left
- > move #300,BitMap.bounds.Bottom
- > move #300,BitMap.bounds.Right
- >
- >BitMap is defined as follows:
- >
- >Rect RECORD 0
- > Top: ds 1
- > Left: ds 1
- > Bottom: ds 1
- > Right: ds 1
- > ORG Top
- > TopLeft: ds.l 1
- > BottomRight: ds.l 1
- > ENDR
- >
- >BitMapRecord RECORD 0
- > baseAddr: ds.l 1
- > rowBytes: ds.w 1
- > bounds: ds.l Rect
- > ENDR
- >
- >BitMap ds BitMapRecord
- >
- >note that i have missed out some code that checks if there exists a block
- >of size 11552 bytes... just to make things clear.
- >
- >then i save all the drawings into the BitMap and restore them onto the
- >window by doing this:
- >
- > pea BitMap ; BitMap is the only parameter
- > _SetPBits ; set port to BitMap
- >
- > ...... CALLS TO DRAWING ROUTINES, MoveTo, LineTo, ...etc
- >
- > move.l myWindowPointer,-(sp) ;push pointer of myWindow
- > _SetPort ;set port to myWindow
- >
- > pea BitMap ;source BitMap
- > pea myRectangle ;source Rectangle
- > pea myRectangle ;destination rectangle
- > move #srcCopy,-(sp) ;normal copy mode
- > clr.l -(sp) ;don't want to clip to a maskRgn, so just
- > ;pass NIL for the maskRgn parameter
- > _StdBits ;call bit transfer
- >
- >where myRectangle is defined as:
- > myRectangle: dc 0,0,300,300
- >
- >and myWindowPointer is defined as:
- > myWindowPointer: ds.l 1
- >
- >the problem that i have is only part of the BitMap got copied to the
- >destination window. The area that got copied is (top:0, left:0, bottom:80,
- >right: 100) and the rest of the 300x300 window area is just a mess...
- >
- >i really don't know what has gone wrong... i have been sitting all day in
- >front of the computer trying to figure out what could be wrong but still
- >didn't make any progress.
- >
- >the only thing i am suspecting wrong is the NIL parameter. I want to pass
- >a NIL pointer for the last parameter of _StdBits but i am not sure what to
- >push on stack. should i just pass a long word zero? or what?
- >
- >what is the constant value defined for NIL or NIL pointer...???
- >
- >i really would appreciate it if anyone can give me some suggestion on this
- >matter.
- >
- >thank you very much in advance!!!
- >
- >peter
- >
- >
-
- hm... i am wondering if there is a maximum size of bitmap that StdBits
- can copy. So far if the rectangle i am copying is within (top:0, left:0,
- bottom:80, right:100), the code above will work correctly... that is the
- stuff i drew in the (0,0,80,100) rectangle got copied correctly to my
- destination window... any idea why this is so?
-
- peter
-
-
-