While working on photographs of the recent lunar eclipse, I noticed that Affinity Photo (v188.8.131.52) was displaying sRGB images on my calibrated monitor lighter than other applications (including Canon Digital Photo Professional, Paint Shop Pro, FastStone Image Viewer, JPEGview and IrfanView--all of which display images identically).
I'm using Windows 7 Pro x64 (updated thru Dec 2018). The monitor is a Dell P2615Q, calibrated with a GretagMacbeth i1 Pro. (.icc file and Color Management snaps attached.) I work exclusively in sRGB space using image files that either have an sRGB ICC profile or no profile embedded.
I first noticed the problem visually but have been able to measure it using screen capture (Windows PrtSc). It's easiest to observe by looking at a black & white step tablet image:
(Step10.tif attached.) The numbers indicate the R G & B pixel values of each square. When I open this file in Affinity Photo and point the mouse to the various tone squares, the expected pixel values appear in the Info display on the right: 10, 20, etc. But the darkest non-zero shades are obviously lighter on the screen than they should be, and when I do a screen capture, paste the image into any editing program (including AP) and look at the pixel values of the squares displayed by AP, I see this:
Square R G B
10 14 15 16 (should be 10 10 10)
20 26 26 26
30 34 35 35
40 43 44 44
(screen capture APwrongTones.png attached)
If I turn OFF monitor calibration by selecting sRGB IEC61966-2.1 as the default profile in Windows Color Management, then close & restart AP and open the step wedge, the tones are now correct: the step tablet looks the same way in AP that it does in every other program, and a screen capture of AP shows the expected values of RGB 10 10 10 in the 10 square, etc.
What seems to be happening is that, when I use a Windows monitor profile other than sRGB, Affinity transforms pixel values using that profile before putting them on screen. The problem is, Windows ALREADY performs this transformation down below Affinity, and the corrections needed to bring my monitor into sRGB calibration wind up being performed TWICE.
I think this behavior would be correct & necessary if I had calibrated my monitor to, say, Adobe RGB and I was displaying an sRGB image. (The transformation needed is monitor profile minus document profile.) But when a monitor profile is used only to bring a monitor into alignment with sRGB, programs need to leave pixel values alone when displaying sRGB images: a #10 gray pixel should be written to the screen as RGB 10 10 10, regardless of what the monitor .icc says. Windows will handle transforming that 10 10 10 to the RGB values which display as #10 gray on the monitor.
I discovered that, with the monitor once again calibrated, I could work around this problem by assigning the monitor profile to the current document in AP--this makes displayed pixel values become correct immediately--and then, when exporting the image, turn off the Embed ICC Profile option. (Annoying, but as a former Windows programmer, I'm used to having to work around bugs & feechurs in APIs.)
However, when I went to rework the raw .NEF images, I discovered that raw mode doesn't allow you to set the document color profile; you're stuck with the raw image's profile. The only way to get AP to display things correctly in raw mode is by turning off monitor calibration. I worked around THIS by preparing a draft image that looked the way I wanted it to (with monitor calibration on), then turning off calibration and adjusting the raw image in AP to match the draft image. I did this out of desperation for the eclipse photos, but I will definitely NOT be making this a part of my normal work flow!
It seems to me that something is missing from Windows monitor calibration via ICC profiles: a statement of intent as to what ICC standard you are calibrating your monitor TO. Absent that, what Affinity needs is a Preferences parameter that specifies the same thing. I would set my Monitor Calibration Intent to sRGB IEC61966-2.1, and AP would realize that no changes were needed when displaying sRGB images to the screen. Alternatively, an option to simply disable color management when writing to the screen would solve the problem for me, limited as I am to sRGB images.
Searching the forum for solutions to this problem, I note that I am not the only person struggling with "incorrect colors" in AP. The problems are often solved by having users set their monitor profile to sRGB--but they lose monitor calibration throughout Windows by doing so. One user discovered the apply-monitor-profile-to-document workaround and was told that he shouldn't do that (really, you shouldn't export an image with a monitor profile embedded). A lot of these problems would not occur if Affinity simply assumed that Windows monitors were sRGB, regardless of the monitor profile in use.
If a monitor has been calibrated to sRGB standard, a program should not alter pixel RGB values when writing sRGB images to the screen.
Affinity Photo is failing to abide by this rule.
I hope someone can look into this. I am gradually learning to use more & more of Affinity Photo, am appreciating what I can do with it, and hope I don't have to abandon it because it's too much work to work around monitor calibration double-application issues.
P.S. The eclipse picture can be seen here: https://jw9c.blogspot.com