How is my cursor whiter than white?
I recently noticed my cursor was whiter than the background white (pure 0xFFFFFF). I originally thought it was an optical illusion as taking screenshots showed that both the background and the cursor were at 0xFFFFFF. Then I took a photo of the cursor and it clearly shows a difference in brightness:
I put a mosaic filter on the image to see the average brightness better:
The interior of the arrow is about 191 grey (0xBF) and the background is about 177 grey (0xB1), meaning the white of the cursor is about 8% brighter than the pure white of the background.
What hardware is doing this and how? Is the colour information being transmitted with more than 8-bits per channel?
The computer is Windows XP with an NVIDEA GeForce 8500 GT graphics card connected to a Samsung 5100 TV via an HDMI cable.
Another photo:
One hardware cursor, one screenshot of the hardware cursor and a 16x16 square of each grey scale value from 0 to 0xFF in 2x2 blocks.
The same as the previous image but with a mosaic filter applied. It should be obvious which is the actual cursor and which is the screenshot of the cursor in the photo. The brightness this time is 185 and 170, still about 8% difference. Using a colour picker, the colour that is 170 in the photo is 0xFFFFFF on the screen. I can't use the colour picker on the cursor itself because it samples the colour directly under the cursor.
As mentioned in Psychogeek's answer, this is an issue with a color profile setting by the operating system.
Color profiles can be applied by the application, the operating system, the video card, and the display hardware.
For OS color profiles in Windows, when sent to the video card the color profile is applied differently to the cursor than it is to the screen image, which can result in different colors if the color profile changes the white point. In your case, the cursor is sent as true white, while the image underneath has a color profile applied, changing the white point to a lower level.
The cursor is sent to the video card separately from the rest of the display data, and is mixed in by the video card at a later stage during rendering, before being sent to the display.
On a simplified level:
[Cursor Draw] -- -- -- -- -- -- --
˅
[Windowing] --> [OS Profile] --> [Video Driver] --> [Video Card] --> [Hardware Profile] --> ...
A screenshot does not apply the OS color profile to the "shot" data, since it is captured at the windowing stage. Generally the screenshot capture will not show the cursor, because it captures even before the OS profile is applied. However certain tools (which I assume you used) to capture the screen will mix the cursor over the image the same way the video card does. Since the white levels of the cursor and the background are both 100%, the screenshot has the same white level for both.
The normal behavior you are seeing can be fixed by using a monitor or video card with a hardware LUT for color calibration, or by forcing the cursor draw to occur at a different rendering point, see this Photo.SE question. You can also edit the cursor image and change the white level if it annoys you. I however think it makes the cursor more noticeable on the screen.
This answer starts with an analysis of why things are not 1:1 with digital, and ends with possible ways to change things based on your actual question.
- Shoot a pic with your camera, all the sensor data is processed.
- Then it is compressed to death.
- Then it moves 1:1 to your computer.
- Where it is displayed being adjusted by any OS color profiles.
- Where it is digitally drawn on a video card that not only can be user adjusted but may have some color tricks of its own.
- Sent to the monitor 1:1.
- Where it can be completely assaulted in processing , prior to making it to a display panel.
- The display panel itself not able to render all aspects of it.
- The backlighting colors variable by huge percentages based on the color spectrum the backlighting emits.
In this case the cursor is (likely) a hardware rendered item that is overlaid in the video cards hardware.
The first thing to look into or attempt to adjust to change it, is the monitor profile and or the OS applied color profiles. Color profiles are found in Control panel, All control panel items, Color Management in there you will find color profiles that change the color before it gets to the monitor itself.
The profiles can be disabled, so you can observe the effect it has.
Adjustments in the video card software. The desktop, the 3D, and the Video direct draw stuff is all controllable, even if these things were not adjusted in the video card software, it could be that having it all set to 0 0 0 there is still some processing that exists. You could try and use it to match the curser overlay, if there was any real reason to bother with it.
The video card is overlaying the hardware rendered curser, and not using the same parameters for that as the rest of the background, and that is just how it is working.
--based on the control pic none of the rest applies to this specific question--
Another possibility is monitor settings, although this is less likely. Auto contrast, auto color items in monitors and TVs can balance out huge bright or dark areas, and often cause undesired changes. Automatic color and leveling adjustments in monitors are not always adjustable, and use many different cute names for the actions they do.
Profiles in monitors like game, movie , desktop, or whatever names they use for profiles set specific color and contrast and brightness settings that they deem useful for the profile selected, and again can be undesired changes even for the proper profile selections.
Sharpening algorithms in the camera, not likely in the video display card, but again in the monitor can create a matrix of highlighting around areas increasing the original contrasts, or (of course) reducing it. In this question it is less likely because the white expands beyond the pixels a sharpening matrix would apply to, unless it was 2 different processing.
The list gets even longer when software is not actually required to have stark white backgrounds, they can be adjusted. The OS and programs can have a background that is not white, but you already know that is not so, in this question if you did a color pick of the background, on the original desktop or program.
Color picking on the desktop shows you the color of the pixel (or pixels) that exist there, providing the user the facts about what the program is displaying. The color pic comes before any color profile adjusts the output. So color picking is a great way to discover the actual color. Then it still passes through processing again.
There are programs that exist that will do a screen capture with the curser overlaid. from that a person could do a color pick of things, but again the curser may be drawn using a different method, and become processed the same way as the rest of it. So while it is possible to do a software digital capture of the screen and inclusive of the curser, it may change what is actually seen here.