What about grayscaling a whole scene (whole window)?
Here's one I did, but it does parse all the pixels:
http://www.blitzbasic.com/codearcs/codearcs.php?code=2089
At some point in the past Indiepath posted some code that was supposed to do this in one go (OpenGL?) but while it worked OK on some cards, it never did on others. (His sample code turned the images into shades of green instead of B/W on my video card, among others)