How is my cursor whiter than white?

21

5

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:

Photo of cursor

I put a mosaic filter on the image to see the average brightness better:

Photo of cursor with mosaic filter

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:

Two cursors and a shaded square

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.

Two cursors and a shaded square with mosaic filter

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.

CJ Dennis

Posted 2015-05-05T06:00:29.017

Reputation: 805

Have you played with the brightness or contrast settings on your monitor? – Ron – 2015-05-05T06:04:16.630

1If the above pictures of the problem, were captured using any camera item which processes the raw sencor imagery (they all do even when stored in raw file formats) Then the visual results have already been altered by processing of the cameras sencor data. To aleviate that issue, would be to have a "control". On the white background have an image of a curser (not a rendered seperate curser) , and observe how they are different. Using various methods and applying controls , you could then assume where it occured. – Psycogeek – 2015-05-05T06:18:11.507

@Psycogeek I guess the software in my eyes is doing the same thing then. How do I access my eye's raw data? Seriously though, the only thing I did to the image was crop it to the relevant bit. I could upload an image of a screenshot of the cursor with the actual cursor next to it but it wouldn't be any more illuminating than I have already explained. Brightness (as I have previously understood it) goes between 0 and 255 (0xFF) per colour channel. If the white inside the cursor was on the same scale it would be roughly 275 (0x113) and there simply isn't enough room in 8 bits to encode this. – CJ Dennis – 2015-05-05T07:02:32.050

@user2714915 I haven't adjusted the brightness or contrast anywhere! That doesn't really get to the heart of my question: How can the cursor be brighter than the brightest colour that can be encoded in 8 bits when my graphics mode is 8 bits per channel colour? – CJ Dennis – 2015-05-05T07:14:27.203

@CJDennis: What program(s) are affected? This looks like a gamma calibration issue to me. – James P – 2015-05-05T10:35:28.330

@James Any program that has a patch of pure white with any black-and-white cursor, or Windows cursor with shadow (as in the photo). – CJ Dennis – 2015-05-05T12:35:17.243

Answers

10

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.

Richie Frame

Posted 2015-05-05T06:00:29.017

Reputation: 1 555

I agree that the cursor is more noticeable. It doesn't annoy me, I was merely curious as to how it is possible technically. Does HDMI carry more than 8 bits per channel or is the remainder of the image compressed (as in audio compression, not digital data compression) so that some levels are equivalent to their neighbouring level? – CJ Dennis – 2015-05-06T08:56:50.433

1HDMI is carrying uncompressed data, most likely at 8-bits per channel in your case, but it is capable of carrying more. This issue occurs prior to the HDMI signal – Richie Frame – 2015-05-06T09:07:45.910

https://en.wikipedia.org/wiki/Uncompressed_video mentions that HDMI may be 24, 30, 36 or 48 bits per pixel (8, 10, 12 or 16 bits per channel). So if it is being sent as 10 bits per channel on my system, "pure" white could be 0x3B3 per channel, while the white of the cursor is 0x3FF. This would allow all 256 8-bit levels to be distinct while allowing room for extra-bright colours for the cursor. Most adjacent levels would have a difference of 0x4, but a few would be only 0x3. – CJ Dennis – 2015-05-07T08:03:03.533

If you have your video card set up to output 10-bit channels then it is 10-bit, but it is not likely that is the case – Richie Frame – 2015-05-07T08:37:10.423

I found a setting in the NVIDIA control panel that allows me to adjust the brightness. It only affects the screen image, not the cursor. I can lower the brightness until white is, at a guess, about 0xC0, making the cursor really stand out! I can't see anything about bits per transmission channel though. – CJ Dennis – 2015-05-07T09:06:34.793

It has nothing to do with bit per channel transmission, it is a colour profile issue, applied at one of the stages during or before rendering. – Trae Abell – 2015-05-10T19:34:04.243

1

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.

Psycogeek

Posted 2015-05-05T06:00:29.017

Reputation: 8 067