TweetFollow Us on Twitter

Winter 92 - GRAPHICS HINTS FROM FORREST

GRAPHICS HINTS FROM FORREST

USING THE PALETTE MANAGER OFF-SCREEN

FORREST TANAKA

[IMAGE 029-030_Tanaka_column_re1.GIF]


Most people who've done any graphics programming on the Macintosh are aware of the Palette Manager, because it's the documented way to control the on-screen color environment, and perhaps because my cohorts and I in Developer Technical Support keep going on about how right the world would be if everyone used it. In an effort to follow the rules as best they can, some people have taken the Palette Manager so much to heart that they use it not only with windows, but with off-screen cGrafPorts as well--something that isn't heard about very much. Some of these people have concluded that all the features of the Palette Manager apply just as well to off-screen cGrafPorts as they do to windows. Logical enough, right?

Well, that's the kick; whether this is logical or not, the truth is that only a small part of the Palette Manager works with off-screen cGrafPorts. Specifically, the pmCourteous usage mode and the pmWhite and pmBlack usage-mode modifiers work fine when they're used in a palette that's attached to an off-screen cGrafPort, but the pmTolerant, pmAnimated, and pmExplicit usage modes do not. In this column, I'll describe how you can take advantage of the Palette Manager features that work off-screen and how you can simulate the features that don't work.

The pmCourteous usage mode seems pretty useless to a lot of people because it has no effect on the current color environment. But in general, making a palette full of pmCourteous colors is a lot better than hard-coding RGBColors into your code. Instead of hard-coding colors, make a palette of courteous colors--as many entries as you need colors--and save it as a 'pltt' resource. When your application runs, call SetPalette to attach this palette to your off-screen cGrafPort. When you need to use a color while drawing into this cGrafPort, pass the desired color's palette index to PmForeColor or PmBackColor, and then draw. This is better than hard-coding colors because you or a software localizer can easily change the colors by changing the 'pltt' resource--no code changes are necessary.

The pmWhite and pmBlack usage-mode modifiers are new with System 7; they let you specify whether you want a particular palette entry to map to white or black in a black-and-white graphics environment. By default, colors whose average color-component value is larger than 32767 are mapped to white and other colors are mapped to black. (If you use RGBForeColor, Color QuickDraw also checks to see whether your specified color is different from your background color but maps to your background color; if so, Color QuickDraw uses the complement of the color you specified so that your drawing is visible over the background.) By specifying that a palette entry is pmCourteous + pmBlack or pmCourteous + pmWhite, you can control which colors map to black and to white when there aren't enough colors available. This applies to palettes attached to off-screen cGrafPorts as well as to palettes attached to windows.

Those are the Palette Manager features that do work off-screen. Now I'll talk about the features that don't and what you can do to get the same effect. The pmExplicit usage mode is handy when you want to draw using a pixel value without knowing or caring what color that pixel value represents. With this mode you can easily show the colors in a screen's color table, and you can also draw into a pixel image with a specific value even though you specify the color for that value elsewhere.

When you have a palette that's attached to an off-screen cGrafPort, pmExplicit colors are interpreted as pmCourteous colors. Instead of using a palette, you should convert your pixel value to an RGBColor and use this as the foreground or background color. Set the current GDevice to your off- screen GDevice so that the color environment is set; then pass your pixel value to Index2Color, which is documented on page 141 ofInside Macintosh Volume V. Index2Color converts your pixel value to the corresponding RGBColor, which you can pass to RGBForeColor or RGBBackColor, and then you can draw. The result is that your pixel value is drawn into the destination pixel image.

Both the pmAnimated and pmTolerant usage modes are used to modify the color environment, and both are interpreted as pmCourteous when they're in a palette that's attached to an off-screen cGrafPort. The most important difference between the two usage modes is in the style of color-table arbitration that they do-- pmTolerant gives the front window the colors it needs, while pmAnimated additionally makes sure that nothing outside the front window is drawn in its colors. Color-table arbitration doesn't apply off screen, so the pmAnimated and pmTolerant usage modes can be unified into "I want to change my off-screen colors."

Changing the colors in an off-screen color environment means changing its color table; the most straightforward way to do this is to modify the contents of the color table directly. That is, get your off-screen color table's handle and then directly assign new values to the rgb fields in its CSpecArray. You could also assign a whole new color table to the off-screen environment by assigning the new one to the pmTable field of the off-screen pixMap. Either way, you have to tell Color QuickDraw what you've done by updating the changed color table's ctSeed field. The next time you draw into your off-screen graphics environment, Color QuickDraw detects your change by comparing the ctSeed of your changed color table against the iTabSeed of the current GDevice's inverse table, and it rebuilds the inverse table according to the changed color table. You can update the ctSeed field by assigning to it the return value of GetCTSeed, which is documented on page 143 ofInside Macintosh Volume V. If the 32-Bit QuickDraw extensions are available, you can update a color table's ctSeed simply by passing the color table to CTabChanged, documented on page 17-26 ofInside Macintosh Volume VI.

If you have a GWorld and you want to replace its color table, you should call UpdateGWorld, passing it a new color table. UpdateGWorld makes sure that all the cached parts of a GWorld are properly updated, which is tough to do any other way. If you don't pass any flags to UpdateGWorld, it's within its rights to destroy your existing GWorld's image. But if you pass the clipPix or stretchPix flag, UpdateGWorld is obligated to keep your existing image, and it tries to reproduce the existing image in the new colors as best it can.

To wrap up, you can use the Palette Manager with off-screen graphics environments, but you'll only be able to use the pmCourteous usage mode and the pmWhite and pmBlack usage-mode modifiers. But that's not to cast aspersions on these features, because they can be very handy for both on-screen and off-screen drawing. The pmExplicit, pmTolerant, and pmAnimated usage modes don't work for off-screen drawing, but there are easy ways to simulate those features without the Palette Manager and without risking future compatibility.

FORREST TANAKA has been playing Developer Technical Support as one of the graphics support people for slightly more than two years. "It amazes me still," he says, "that the more you learn about the Macintosh graphics tools, the farther off total understanding seems to be." Outside of DTS, he likes to ride his bike, and uses it to commute the three blocks to his office ("Hey, it's faster than driving the three blocks!"), and he likes to try getting his radio-controlled car to act as if it's actually controlled.*

PRINT HINTS FROM LUKE & ZZ is in hibernation.*

For more details about changing or replacing off-screen color tables, see the October 1991 version of Macintosh Technical Note #120, "Principia Off-Screen Graphics Environments." *

 
AAPL
$486.14
Apple Inc.
+18.78
MSFT
$32.32
Microsoft Corpora
-0.55
GOOG
$883.44
Google Inc.
-2.07

MacTech Search:
Community Search:

Software Updates via MacUpdate

Dragon Dictate 3.0.3 - Premium voice rec...
With Dragon Dictate speech-recognition software, you can use your voice to create and edit text or interact with your favorite Mac applications. Far more than just speech-to-text, Dragon Dictate... Read more
TrailRunner 3.7.746 - Route planning for...
Note: While the software is classified as freeware, it is actually donationware. Please consider making a donation to help stimulate development. TrailRunner is the perfect companion for runners,... Read more
VueScan 9.2.23 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
Acorn 4.1 - Bitmap image editor. (Demo)
Acorn is a new image editor built with one goal in mind - simplicity. Fast, easy, and fluid, Acorn provides the options you'll need without any overhead. Acorn feels right, and won't drain your bank... Read more
Mellel 3.2.3 - Powerful word processor w...
Mellel is the leading word processor for OS X, and has been widely considered the industry standard since its inception. Mellel focuses on writers and scholars for technical writing and multilingual... Read more
Iridient Developer 2.2 - Powerful image...
Iridient Developer (was RAW Developer) is a powerful image conversion application designed specifically for OS X. Iridient Developer gives advanced photographers total control over every aspect of... Read more
Delicious Library 3.1.2 - Import, browse...
Delicious Library allows you to import, browse, and share all your books, movies, music, and video games with Delicious Library. Run your very own library from your home or office using our... Read more
Epson Printer Drivers for OS X 2.15 - Fo...
Epson Printer Drivers includes the latest printing and scanning software for OS X 10.6, 10.7, and 10.8. Click here for a list of supported Epson printers and scanners.OS X 10.6 or laterDownload Now Read more
Freeway Pro 6.1.0 - Drag-and-drop Web de...
Freeway Pro lets you build websites with speed and precision... without writing a line of code! With it's user-oriented drag-and-drop interface, Freeway Pro helps you piece together the website of... Read more
Transmission 2.82 - Popular BitTorrent c...
Transmission is a fast, easy and free multi-platform BitTorrent client. Transmission sets initial preferences so things "Just Work", while advanced features like watch directories, bad peer blocking... Read more

Butterfly Sky Review
Butterfly Sky Review By Lee Hamlet on August 13th, 2013 Our Rating: :: BUTT-BOUNCING FUNUniversal App - Designed for iPhone and iPad Butterfly Sky combines the gameplay of Doodle Jump and Tiny Wings into a fun and quirky little... | Read more »
Guitar! by Smule Jams Out A Left-Handed...
Guitar! by Smule Jams Out A Left-Handed Mode, Unlocks All Guitars Posted by Andrew Stevens on August 13th, 2013 [ permalink ] | Read more »
KungFu Jumpu Review
KungFu Jumpu Review By Lee Hamlet on August 13th, 2013 Our Rating: :: FLYING KICKSUniversal App - Designed for iPhone and iPad Kungfu Jumpu is an innovative fighting game that uses slingshot mechanics rather than awkward on-screen... | Read more »
The D.E.C Provides Readers With An Inter...
The D.E.C Provides Readers With An Interactive Comic Book Platform Posted by Andrew Stevens on August 13th, 2013 [ permalink ] | Read more »
Choose ‘Toons: Choose Your Own Adventure...
As a huge fan of interactive fiction thanks to a childhood full of Fighting Fantasy and Choose Your Own Adventure books, it’s been a pretty exciting time on the App Store of late. Besides Tin Man Games’s steady conquering of all things Fighting... | Read more »
Terra Monsters Goes Monster Hunting, Off...
Terra Monsters Goes Monster Hunting, Offers 178 Monsters To Capture and Do Battle With Posted by Andrew Stevens on August 13th, 2013 [ permalink ] | Read more »
Blaster X HD Review
Blaster X HD Review By Jordan Minor on August 13th, 2013 Our Rating: :: OFF THE WALLiPad Only App - Designed for the iPad For a game set in a box, Blaster X HD does a lot of thinking outside of it.   | Read more »
Tube Map Live Lets You View Trains In Re...
Tube Map Live Lets You View Trains In Real-Time Posted by Andrew Stevens on August 13th, 2013 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Premier League Kicks Off This Week; Watc...
Premier League Kicks Off This Week; Watch Every Single Match Live Via NBC Sports Live Extra and Your iPhone or iPad Posted by Jeff Scott on August 13th, 2013 [ permalink ] | Read more »
Meet Daniel Singer, the Thirteen-Year-Ol...
Ever had the idea for an app, but felt like the lack of programming and design ability was a bit of a non-starter? Well, 13-year-old Daniel Singer has made an app. He’s the designer of Backdoor, a chat app that lets users chat with their friends... | Read more »

Price Scanner via MacPrices.net

Can Surface be Saved? – Another Microsoft Bra...
WinSuperSite’s Paul Thurrott predicts that industry watchers and technology enthusiasts will be debating Microsoft’s decision to enter the PC market for years to come, but in the wake of a disastrous... Read more
Apple refurbished iPads and iPad minis availa...
 Apple has Certified Refurbished iPad 4s and iPad minis available for up to $140 off the cost of new iPads. Apple’s one-year warranty is included with each model, and shipping is free: - 64GB Wi-Fi... Read more
Snag an 11-inch MacBook Air for as low as $74...
 The Apple Store has Apple Certified Refurbished 2012 11″ MacBook Airs available starting at $749. An Apple one-year warranty is included with each model, and shipping is free: - 11″ 1.7GHz/64GB... Read more
15″ 2.3GHz MacBook Pro (refurbished) availabl...
 The Apple Store has Apple Certified Refurbished 15″ 2.3GHz MacBook Pros available for $1449 or $350 off the cost of new models. Apple’s one-year warranty is standard, and shipping is free. Read more
15″ 2.7GHz Retina MacBook Pro available with...
 Adorama has the 15″ 2.7GHz Retina MacBook Pro in stock for $2799 including a free 3-year AppleCare Protection Plan ($349 value), free copy of Parallels Desktop ($80 value), free shipping, plus NY/NJ... Read more
13″ 2.5GHz MacBook Pro on sale for $150 off M...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $1049.95 including free shipping. Their price is $150 off MSRP plus NY sales tax only. B&H will include free copies of Parallels Desktop... Read more
iPod touch (refurbished) available for up to...
The Apple Store is now offering a full line of Apple Certified Refurbished 2012 iPod touches for up to $70 off MSRP. Apple’s one-year warranty is included with each model, and shipping is free: -... Read more
27″ Apple Display (refurbished) available for...
The Apple Store has Apple Certified Refurbished 27″ Thunderbolt Displays available for $799 including free shipping. That’s $200 off the cost of new models. Read more
Apple TV (refurbished) now available for only...
The Apple Store has Apple Certified Refurbished 2012 Apple TVs now available for $75 including free shipping. That’s $24 off the cost of new models. Apple’s one-year warranty is standard. Read more
AnandTech Reviews 2013 MacBook Air (11-inch)...
AnandTech is never the first out with Apple new product reviews, but I’m always interested in reading their detailed, in-depth analyses of Macs and iDevices. AnandTech’s Vivek Gowri bought and tried... Read more

Jobs Board

Sales Representative - *Apple* Honda - Appl...
APPLE HONDA AUTOMOTIVE CAREER FAIR! NOW HIRING AUTO SALES REPS, AUTO SERVICE BDC REPS & AUTOMOTIVE BILLER! NO EXPERIENCE NEEDED! Apple Honda is offering YOU a Read more
*Apple* Developer Support Advisor - Portugue...
Changing the world is all in a day's work at Apple . If you love innovation, here's your chance to make a career of it. You'll work hard. But the job comes with more than Read more
RBB - *Apple* OS X Platform Engineer - Barc...
RBB - Apple OS X Platform Engineer Ref 63198 Country USA…protected by law. Main Function | The engineering of Apple OS X based solutions, in line with customer and Read more
RBB - Core Software Engineer - Mac Platform (...
RBB - Core Software Engineer - Mac Platform ( Apple OS X) Ref 63199 Country USA City Dallas Business Area Global Technology Contract Type Permanent Estimated publish end Read more
*Apple* Desktop Analyst - Infinity Consultin...
Job Title: Apple Desktop Analyst Location: Yonkers, NY Job Type: Contract to hire Ref No: 13-02843 Date: 2013-07-30 Find other jobs in Yonkers Desktop Analyst The Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.