views:

1108

answers:

5

Is it possible to invert display colors on Windows like Macs can?

I have nVidia GeForce 6200 graphics card and 17" Samsung SyncMaster display.

+1  A: 

Go to the appearance settings (in vista this is through personalization > color and appearance > classic properties)

You can then customize your settings or pick one of the high contrast schemes.

DShook
This inverts only system colors, not web pages, PDFs etc.Or it behaves diferently in Vista (I have XP)
CommanderZ
A: 

You can sort that out programming a pixel shader or fragment program (OpenGL) to invert all the screen pixels synched with the refresh rate. I believe this can be done fast enough in the GPU to be executed in your gfx card model, altough I must recognize i'm ignorant about the pixel fillrate of the Turbocache variants.

Hernán
+1  A: 

This would be a pretty easy application to write. In fact, it would take more time hooking it up to a keyboard combo or some other hook than anything else. The best way I guess would be to make an application that just inverts the colors, and then add it as a shortcut, with a hot-key combo. Like CTRL-ALT-I to Invert the colors, and again to switch them back.

If you need help with this let me know. This should only end up as an hour or less C++ application.

LarryF
Sounds great, but I have no idea how to do this in C++. Through some driver manipulation?
CommanderZ
Naa.. This can be done with the Win32 API. But, in reading some of your comments, it got me thinking... If you are displaying an image, or a PDF file, you are kind of at the mercy of the app doing the rendering... I would whip something up for you to try, at least.
LarryF
Exactly how would you achieve this application? I'll give a hint, it won't take an hour for this C++ application ;-) The user will want to interact with the screen while the colors are inverted, just like on the Mac.
Chris O
@Chris O - Well, if you want to invert the entire screen, and make it usable, you'd probably have to write a video filter driver, which, yea, wouldn't take an hour... If you want an app to invert the colors on a display image, that shouldn't bee all THAT hard. But, being that this is all just talk, I have to admit, I have NOT done due diligance on this, so there could be some stuff I'm not considering... Not to mention I wrote this over a year ago, when I was probably working in an imaging project, so it was all fresh in my 'Chip Ram', now, it's not even in my 'Fast Ram' :)... - Larry
LarryF
+1  A: 

Windows 7 maginifier glass tool supports color inversion and the magnification is not obligatory.

CommanderZ
+1  A: 

If you don't have Windows 7, you can use a shareware app called PowerStrip, that will achieve the color inversion with hotkey support. I've used this extensively on XP. This app interacts with the video driver.

If you want to write your own app in user-mode code, then you have two options:

  1. Use DirectX overlays, capture the entire screen, invert blit to the overlay, repeat fast enough to look alright.
  2. Use some GDI tricks, create a dead window that is on top of everything else, capture the screen, invert blit to the dead window. The dead window has 99% opacity, so to capture the windows underneath it, don't use the CAPTUREBLT flag with BitBlt(). In order to allow the mouse events to get through to the real window, use SetWindowRgn to put a 1-pixel "hole" in the dead window where the mouse is. Uh, this is quite hacky but works.

You can also download the debug symbols for the Window's magnifiers, and study those ;-)

Chris O