I'm puzzled by how XYZ values are to be used as input to transformations. In particular, I want to transform some XYZ values into monitor RGB values.
 
(1) Suppose I have RGB values in, let's say, sRGB, of (127, 127, 127). If I understand correctly, if I transform these into XYZ using an sRGB -> XYZ transform, (that is, using the sRGB profile as input, and XYZ profile as output), I'll get XYZ values referencing D50. Is that correct? The values I get in this case are: X = 0.204712, Y = 0.212311, Z = 0.175171.
 
(2) Now, suppose I have a monitor profile and want to convert those XYZ values into RGB values in the monitor space. So, I create an XYZ -> monitor profile transform using perceptual intent. When I do this, I get RGB values of 123, 123, 126. The visual appearance on the screen is a bluish cast. Yet if I create a transformation from sRGB -> monitor profile directly, (and using perceptual intent)  I get RGB values of 126, 125, 126, which appear neutral gray on my particular monitor. These are also the same values that Photoshop gets as well. (That is, I read the values directly off the Photoshop window with a third party pixel sampler.)
 
(3) The problem is more apparent if I transform sRGB values of 255, 255, 255 to XYZ, and then to the monitor space. The resulting RGB values are 250, 253, 253 with a very visible cyan cast. Yet if I go direct from sRGB to monitor RGB, I get values of 255, 255, 255, which matches what I get in photoshop as well.

So obviously, I'm doing something wrong when going from XYZ to monitor RGB. I'll bet it has to do with the assumed ref white of the monitor profile. Do I have to chromatically adapt the XYZ values from D50 to whatever the monitor profile ref white is first? And how do I even know the ref white of the monitor profile? A more general question, then, is what is the assumed ref white of XYZ values that are input to a profile?
 
Help!
 
Bryan

Reply via email to