<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2359733660078938387</id><updated>2011-08-29T09:35:27.778+02:00</updated><category term='screensaver'/><category term='ArgyllCMS'/><category term='xcalib'/><title type='text'>Color hacks</title><subtitle type='html'>A blog where I collect all my and some others' news in color management.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-8440071340857608954</id><published>2009-11-02T21:31:00.002+01:00</published><updated>2009-11-02T21:36:54.163+01:00</updated><title type='text'>Auto-switching profiles for different displays</title><content type='html'>Some time ago a Jon sent me a nice postcard. It contained a link to his blog where he wrote about aut-changing the display profile when an external monitor is connected. He wrote a lot about it &lt;a href="http://photographicallyinclined.blogspot.com/2008/09/auto-switching-monitor-color-profiles.html"&gt;here&lt;/a&gt;. I also had this problem frequently on my Thinkpad T60, so I will probably try this out.&lt;br /&gt;&lt;br /&gt;Short summary: The IBM presentation director can run commands on a display setup change, which could also be used to change the profile by a dedicated xcalib commandline.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-8440071340857608954?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/8440071340857608954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=8440071340857608954' title='27 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/8440071340857608954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/8440071340857608954'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2009/11/auto-switching-profiles-for-different.html' title='Auto-switching profiles for different displays'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>27</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-6244722102687456547</id><published>2009-11-01T19:00:00.003+01:00</published><updated>2009-11-01T20:21:02.313+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcalib'/><title type='text'>Unexpected xcalib applications #3: improving readability</title><content type='html'>I personally like command line terminals with a black background and white (or even green) text. However, this is not the most readable color combination and may stress one's eyes after long working sessions. In addition visually impaired people may also like to tweak the screen just for better readability.&lt;br /&gt;&lt;br /&gt;There are two posts I've stumple across, which deal with readability. On the Adobe forums one suggested that Adobe Reader may need a feature to invert the page, i.e. to exchange background and foreground, &lt;a href="http://forums.adobe.com/thread/395433"&gt;here&lt;/a&gt;: The poster complains that reading PDFs is like having a bulb in front of you, which seems a valid point.&lt;br /&gt;&lt;br /&gt;Another post comes from the Vinux development blog, &lt;a href="http://vinux-development.blogspot.com/2009/04/vinux-15-manifesto.html"&gt;here&lt;/a&gt;: Vinux is a special linux variant for visually impaired people. One issue for people with bad vision is wrong contrast. Hence, they propose using xcalib for applications like brightness and contrast control using keyboard shortcuts and in addition for an inverted copy of the primary screen on a second monitor, so that one can use the monitor that is more readable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-6244722102687456547?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/6244722102687456547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=6244722102687456547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/6244722102687456547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/6244722102687456547'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2009/11/unexpected-xcalib-applications-3.html' title='Unexpected xcalib applications #3: improving readability'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-7551330047648991984</id><published>2009-11-01T18:16:00.003+01:00</published><updated>2009-11-01T18:35:40.392+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcalib'/><title type='text'>Unexpected xcalib applications #2: fixing brocken screens</title><content type='html'>There was one post on the Ubuntu forums that I didn't expect is a possible application for xcalib: fixing a brocken screen. You can find the original post &lt;a href="http://ubuntuforums.org/showpost.php?p=7616936&amp;amp;postcount=1"&gt;here&lt;/a&gt; and the solution is &lt;a href="http://ubuntuforums.org/showpost.php?p=7622602&amp;amp;postcount=8"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I didn't know that a screen can become completely inverted after it was dropped on the floor, but well, I just hope that this never happens to me. Nevertheless, the solution can either be to use compiz and invert everything or you can just use xcalib with the -invert switch. This switch I've added just for fun because I wanted to see whether it's possible to set arbitrary values in the video LUT. The interesting observation there was that X11 does not check the values, whereas on Windows the operating system does not allow you to set completely unlikely screen calibration values. Hence, this will only work on Linux:&lt;br /&gt;&lt;br /&gt;&lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 320px; height: 20px; text-align: left;"&gt;xcalib -invert -alter&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;When you are going to do color-critical work (which I don't recommend with a knowingly broken screen!) and wanto to create an ICC profile, be careful: many calibration tools reset the LUT to the default values (the equivalent of xcalib -clear) - which are totally useless in this case to derive an ICC profile. Hence, better explicitly disable screen calibration in this case!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-7551330047648991984?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/7551330047648991984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=7551330047648991984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/7551330047648991984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/7551330047648991984'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2009/11/unexpected-xcalib-applications-2-fixing.html' title='Unexpected xcalib applications #2: fixing brocken screens'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-5990392994280879132</id><published>2009-10-29T15:51:00.010+01:00</published><updated>2009-11-01T18:35:57.039+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcalib'/><title type='text'>Unexpected xcalib applications #1: preserving night vision</title><content type='html'>It's been a while since I have done work on xcalib or posted here on this blog but I have a little bit problems with jetlag currently, which provides me with a little bit of extra time. So, I've done a little google research on where xcalib is used in scenarios that haven't been envisioned when I wrote xcalib.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Application #1: Making the screen red to preserve night vision&lt;/span&gt;&lt;br /&gt;(from here: &lt;a href="http://ubuntuforums.org/showpost.php?p=6803029&amp;amp;postcount=4"&gt;http://ubuntuforums.org/showpost.php?p=6803029&amp;amp;postcount=4&lt;/a&gt; - by sanskaras)&lt;br /&gt;&lt;br /&gt;The trick is basically to switch off green and blue entirely. The proposed solution is modifying these two channels with the -green and -blue command line paramters. I've realized that these quite powerful commands are not documented in the README currently, hence here's the description:&lt;br /&gt;&lt;pre&gt;-green GREENGAMMA GREENBRIGHTNESS GREENCONTRAST&lt;br /&gt;-blue BLUEGAMMA BLUEBRIGHTNESS BLUECONTRAST&lt;br /&gt;-red REDGAMMA REDBRIGHTNESS REDCONTRAST&lt;br /&gt;&lt;/pre&gt;With these switches and the -alter command it is possible to modify the existing color behavior.&lt;br /&gt;&lt;br /&gt;Hence, the following is, according to the link, a possible setting for disabling green and blue.&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 320px; height: 50px; text-align: left;"&gt;xcalib -green .1 0 1 -alter&lt;br /&gt;xcalib -blue .1 0 1 -alter&lt;/pre&gt; &lt;/div&gt;These are the currently lowest allowed parameters in xcalib, hence it's well possible that I remove these limits in future versions or add a parameter to disable a channel entirely.&lt;br /&gt;&lt;br /&gt;When all is over or the screen became unreadable, you can always revert back to normal:&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 320px; height: 34px; text-align: left;"&gt;xcalib -clear&lt;span style="font-family:Georgia,serif;"&gt;&lt;/span&gt;&lt;/pre&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-5990392994280879132?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/5990392994280879132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=5990392994280879132' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/5990392994280879132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/5990392994280879132'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2009/10/unexpected-xcalib-applications-1.html' title='Unexpected xcalib applications #1: preserving night vision'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-3383770782981202077</id><published>2008-08-19T22:13:00.003+02:00</published><updated>2008-08-19T22:17:08.504+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ArgyllCMS'/><title type='text'>GUIs for ArgyllCMS - Part 3: Javascript GUI</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;On the mailing list for ArgyllCMS there was also a post by Gorazd, announcing his Javscript GUI for ArgyllCMS.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:130%;"&gt;Third GUI: Javascript web interface by Gorazd.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Can be downloaded and be run from there.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;a href="http://x3.ntf.uni-lj.si/%7Egojc/Argyll%20CMS/"&gt;http://x3.ntf.uni-lj.si/~gojc/Argyll%20CMS/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;It wasn’t completely clear to me what it really does. First let’sstart with a screenshot:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKspplOuEUI/AAAAAAAABmA/l9SdQequ_S4/s1600-h/javascriptgui_1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_oO6f9g91sDY/SKspplOuEUI/AAAAAAAABmA/l9SdQequ_S4/s400/javascriptgui_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5236324786093560130" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;As I understood it, it will create the command lines from the parameters you set in the web form. You then can paste this command line into your shell and run the Argyll binaries. This basically saves you time for looking up all the parameters, their meaning and allowed combinations. It can not run the applications for you since the browser can not execute binaries on your harddisk – otherwise this would require you to only download the Argyll binaries and then use the most current GUI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-size:130%;" lang="EN-US" &gt;Summary:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;I’m a little puzzled what it really is good for right now but I think it is a different direction to what we know already (stand-alone applications for color profile generating). Extending this to a web-service that can create profiles from the user input can be nice for the future.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-3383770782981202077?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/3383770782981202077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=3383770782981202077' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/3383770782981202077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/3383770782981202077'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2008/08/guis-for-argyllcms-part-3-javascript.html' title='GUIs for ArgyllCMS - Part 3: Javascript GUI'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oO6f9g91sDY/SKspplOuEUI/AAAAAAAABmA/l9SdQequ_S4/s72-c/javascriptgui_1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-6091516413693369774</id><published>2008-08-19T22:06:00.003+02:00</published><updated>2008-08-19T22:13:30.826+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ArgyllCMS'/><title type='text'>GUIs for ArgyllCMS - Part 2: dispcalGUI</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style=";font-size:100%;" lang="EN-US" &gt;In my previous post I announced that I would like to compare the different GUIs for ArgyllCMS. dispcalGUI was announced yesterday and I couldn't wait trying it out right after ArgyllCMSGUI.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style=";font-size:100%;" lang="EN-US" &gt;&lt;span style="font-size:130%;"&gt;Second GUI: dispcalGUI by Florian Höch&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style="font-size:100%;"&gt;Win32 version can be download from &lt;/span&gt;&lt;a href="http://hoech.net/dispcalGUI/dispcalGUI-v0.1b-win32-x86.zip"&gt;&lt;span style="font-size:100%;"&gt;http://hoech.net/dispcalGUI/dispcalGUI-v0.1b-win32-&lt;/span&gt;x86.zip&lt;/a&gt; . It also needs an existing unpacked Argyll for Win32.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;When you start dispcalGUI, a command line-like window will appear and shortly after you have to select the directory for the Argyll binaries.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oO6f9g91sDY/SKsoMXeUwnI/AAAAAAAABlo/pkXW4YoiSCQ/s1600-h/dispcalgui_1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_oO6f9g91sDY/SKsoMXeUwnI/AAAAAAAABlo/pkXW4YoiSCQ/s400/dispcalgui_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5236323184673079922" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;It is a simpler and more user-oriented GUI than Argyll CMS GUI. Clearly, many options are missing – but this can be ignored for the majority of users. The only thing I had to change was the display type to LCD and then I pressed “Calibrate &amp;amp; profile”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Similarly to Argyll CMS GUI, dispcal (for calibration) will run and afterwards dispread (for measuring the patches). The test chart is not generated by dispcalGUI but it uses one of the files that come with the ZIP file. In my case, a test chart with 512 patches was used. This also takes&lt;span style=""&gt;  &lt;/span&gt;some time and I had to abort the operation since another operation was in front of dispread’s measurement window. I then redid the “Profile only” with a much smaller test chart to save time. It the ran dispread followed by colprof and showed the final dialog afterwards:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKsoMo5GgNI/AAAAAAAABlw/R9ElIM-Sl_Y/s1600-h/dispcalgui_2.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_oO6f9g91sDY/SKsoMo5GgNI/AAAAAAAABlw/R9ElIM-Sl_Y/s400/dispcalgui_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5236323189348794578" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;As soon as I pressed OK, the dispwin binary was run to install the profile.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oO6f9g91sDY/SKsoMvrZOAI/AAAAAAAABl4/hF1gQScO7p0/s1600-h/dispcalgui_3.jpg"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_oO6f9g91sDY/SKsoMvrZOAI/AAAAAAAABl4/hF1gQScO7p0/s400/dispcalgui_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5236323191170349058" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"  style="font-size:130%;"&gt;Summary:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;I liked dispcalGUI because it’s much more intuitive than the command line binaries or Argyll CMS GUI. In addition, the automatic colorimeter detection worked like a charm. dispcalGUI comes much closer to lprof (which I haven’t tried for a while). There are no cons for me besides that it hides expert options- but do you really need them?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-6091516413693369774?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/6091516413693369774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=6091516413693369774' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/6091516413693369774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/6091516413693369774'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2008/08/guis-for-argyllcms-part-1-dispcalguoi.html' title='GUIs for ArgyllCMS - Part 2: dispcalGUI'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oO6f9g91sDY/SKsoMXeUwnI/AAAAAAAABlo/pkXW4YoiSCQ/s72-c/dispcalgui_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-853954943289790886</id><published>2008-08-19T21:33:00.010+02:00</published><updated>2008-08-19T22:04:35.829+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ArgyllCMS'/><title type='text'>GUIs for ArgyllCMS - Part 1: ArgyllCMSGUI</title><content type='html'>&lt;span style="" lang="EN-US"&gt;Today I started a small experiment: let's try out the various graphical user interfaces for ArgyllCMS that were announced on the Argyll mailing list recently. In this first post ArgyllCMSGUI was analyzed from the user perspective. I tried to act like a normal user although I know the Argyll tools quite well.&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKsjp9nN-2I/AAAAAAAABko/NT2SBmKpfl0/s1600-h/argyllcmsgui_1.GIF"&gt;&lt;br /&gt;&lt;/a&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style="font-size:130%;"&gt;First GUI: ArgyllGUI by Steven Greaves / Digifab.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;a href="http://www.digifab.com/ArgyllCMSGUI/"&gt;http://www.digifab.com/ArgyllCMSGUI/&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;You must download both the ArgyllCMSGUI (as a ZIP archive for Win32) and the Argyll CMS itself (fort he normal user I recommend the precompiled executables). I’ve used the following download links:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;a href="http://www.argyllcms.com/Argyll_V1.0.2_win32_exe.zip"&gt;http://www.argyllcms.com/Argyll_V1.0.2_win32_exe.zip&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;a href="http://www.digifab.com/ArgyllCMSGUI/ArgyllCMSGUI108.zip"&gt;http://www.digifab.com/ArgyllCMSGUI/ArgyllCMSGUI108.zip&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Then you have to put the unpacked ArgyllCMS files into any directory on your hard drive (e.g. C:\Program Files\Argyll_V1.0.2\ ). I then put the content of the ArgyllCMSGUI zip archive (the single file) into the bin folder of Argyll ( i.e. in my case C:\Program Files\Argyll_V1.0.2\bin\ ) and started the ArgyllCMSGui.exe. It will then ask you for the directory where you have your Argyll binaries – I have them in the same folder so I could just &lt;/span&gt;&lt;span style="" lang="EN-US"&gt;press OK. When I pressed Cancel, the ArgyllCMSGUI ap&lt;/span&gt;&lt;span style="" lang="EN-US"&gt;p crashed, btw. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Then you should see a screen like this:&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKsnCVprlRI/AAAAAAAABlg/0Jf6a0DQJa4/s1600-h/argyllcmsgui_1.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_oO6f9g91sDY/SKsnCVprlRI/AAAAAAAABlg/0Jf6a0DQJa4/s400/argyllcmsgui_1.jpg" alt="" id="BLOGGER_PHOTO_ID_5236321912873522450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;I decided to first test the display calibration part, hence I pressed on the big icon with a display on it. Et voila:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskVQ-78JI/AAAAAAAABkw/E_rqgRgrHMs/s1600-h/argyllcmsgui_2.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskVQ-78JI/AAAAAAAABkw/E_rqgRgrHMs/s400/argyllcmsgui_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5236318939503128722" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;It exposes all parameters of dispcal. The parameters are hacked into the software – so this is not guaranteed to work with any version of dispcal - but this shouldn’t be a big issue for the future. This list of parameters is probably overwhelming for all but the very experienced users – but Steve included the Argyll documentation in his app. Simply press the blue buble with the &lt;i style=""&gt;i&lt;/i&gt; in it and the window will expand to show the parameters and their meaning.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;I’ve previously installed a software from MonacoSys (the software that came with my DTP94/Monaco Optix XR device). Since the provided driver does not work with Argyll, I had to exchange the USB driver first with the procedure as given on Graeme’s site:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;a href="http://www.argyllcms.com/doc/Installing_MSWindows.html"&gt;http://www.argyllcms.com/doc/Installing_MSWindows.html&lt;/a&gt; Because if I did not, then clicking next simply resulted in the window being closed without any further feedback to the user.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;After I had the right driver and changed the “Display Type” to “LCD”, clicking next resulted in a command line window with the typical dispcal „user interface“. I then simply followed the messages in this window, which was basically to self-calibrate the instrument and select the user-controls that are available for the display (brightness, contrast, gain for red, green and blue). Since my laptop display has none of these, I pressed 7 for continuing. After a while and several measured patches a file argyllcal.cal was residing in the folder of ArgyllCMSGUI.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Then a new window appeared on the screen&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oO6f9g91sDY/SKskp72225I/AAAAAAAABk4/CiErIrakXeE/s1600-h/argyllcmsgui_3.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_oO6f9g91sDY/SKskp72225I/AAAAAAAABk4/CiErIrakXeE/s400/argyllcmsgui_3.jpg" alt="" id="BLOGGER_PHOTO_ID_5236319294609349522" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;This window is for configuring “targen”, the Argyll application that creates the measurement patches for all devices. The “Target Colorant Type” was already set to “Video RGB”, so I pressed Next. When I did this a new patch, named argylldisplay.ti1 was created in the working directory and a new window appeared:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oO6f9g91sDY/SKskqHwaV5I/AAAAAAAABlA/PS5F7HOhzHc/s1600-h/argyllcmsgui_4.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_oO6f9g91sDY/SKskqHwaV5I/AAAAAAAABlA/PS5F7HOhzHc/s400/argyllcmsgui_4.jpg" alt="" id="BLOGGER_PHOTO_ID_5236319297803540370" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;This window configures the dispread application. The names of the output file of the previous running applications were already inserted into the fields, beside that I had to change the display type again from CRT to LCD.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskqKcAMAI/AAAAAAAABlI/EMFRrzAFh1o/s1600-h/argyllcmsgui_5.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Once again you have to self-calibrate the instrument. As you see, a patch consisting of 836 patches was created by targen that is then read after any key is pressed. Before measurement starts, the calibration is applied to the display (your display’s overall color appearance may notably change).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskqKcAMAI/AAAAAAAABlI/EMFRrzAFh1o/s1600-h/argyllcmsgui_5.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskqKcAMAI/AAAAAAAABlI/EMFRrzAFh1o/s400/argyllcmsgui_5.jpg" alt="" id="BLOGGER_PHOTO_ID_5236319298523246594" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskqJyQJqI/AAAAAAAABlQ/8aN0EreIIcI/s1600-h/argyllcmsgui_6.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskqJyQJqI/AAAAAAAABlQ/8aN0EreIIcI/s400/argyllcmsgui_6.jpg" alt="" id="BLOGGER_PHOTO_ID_5236319298348132002" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;After the vast amount of patches was read (for me it took ~2 seconds per patch, so the overall procedure took half an hour), another window of Argyll CMS GUI appeared.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oO6f9g91sDY/SKskqJyQJqI/AAAAAAAABlQ/8aN0EreIIcI/s1600-h/argyllcmsgui_6.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oO6f9g91sDY/SKslYaZsqVI/AAAAAAAABlY/e-UiOonn17I/s1600-h/argyllcmsgui_7.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_oO6f9g91sDY/SKslYaZsqVI/AAAAAAAABlY/e-UiOonn17I/s400/argyllcmsgui_7.jpg" alt="" id="BLOGGER_PHOTO_ID_5236320093082528082" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;In this window the profile creation parameters can be set. By default, only the most upper region is visible. I decided to only fill out the manufacturer, model and description fields so that I can distinguish the profile from other profiles I have created or will create in the future. After clinking OK, the window closed. I was wondering where the profile is expected to reside on my hard drive but couldn’t find it. However, there was a debug file created for every step of Argyll CMS GUI that contains the command line for the invoked Argyll tools. So I retyped the command in a normal CMD shell:&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span style="" lang="EN-US"&gt;C:\Program Files\Argyll_V1.0.2&gt;"C:\Program Files\Argyll_V1.0.2\bin\colprof.exe" -v -A"Lenovo" -M"Thinkpad T60 SXGA+ LCD" -D"profile created using Argyll CMS GUI&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="font-family:courier new;"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style=""&gt; &lt;/span&gt;on 2008-08-19" -qm -L100 -al -iD50 -o1931_2 -tp -Ts "argylldisplay"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style="font-family:courier new;"&gt;C:\Program Files\Argyll_V1.0.2\bin\colprof.exe: Error - Requested spectral interpretation when data not available&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Basically, there was an error that the “-o” and “-i” parameter are not allowed when only colorimetric data (as is when I use a colorimeter for display profile creation) are available. So I simply removed the “-iD50 -o1931_2” from the line and I finally got my profile. Giving the default parameter on the command line should a) not be done by the GUI (since it’s the default parameter) and b) be ignored by colprof anyway. So far I have not seen a way to disable this behaviour and therefore the additional command line work-around is necessary.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;&lt;span style="font-size:130%;"&gt;Summary:&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;Very complex interface, which is basically a window for the command line programs existing in the Argyll CMS. By having the help included, people can look up the meaning of the parameters but many non-expert users will probably not understand the technical matters. The big plus is that all knobs available in the command line tools are available and the typical workflow (the order the command line applications have to be started) is included already. The big minus is that feedback to the user is virtually zero, hence errors are not displayed and users will not know what happened without starting a shell and typing the command line which is saved in the debug files. I personally see no benefit currently in using the tool because of the zero-user-feedback.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-US"&gt;My first shot recommendations for improvement would be to pass error messages to the user, only show a subset of the options by default and eliminate the –i/-o bug.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-853954943289790886?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/853954943289790886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=853954943289790886' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/853954943289790886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/853954943289790886'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2008/08/guis-for-argyllcms-part-1-argyllcmsgui.html' title='GUIs for ArgyllCMS - Part 1: ArgyllCMSGUI'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oO6f9g91sDY/SKsnCVprlRI/AAAAAAAABlg/0Jf6a0DQJa4/s72-c/argyllcmsgui_1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-578294747818598743</id><published>2008-02-15T20:11:00.003+01:00</published><updated>2008-02-15T22:19:23.177+01:00</updated><title type='text'>Monitors with internal LUTs</title><content type='html'>Once a while there's a post on the openicc list that deals with (pretty expensive) TFT displays that have internal LUTs for color calibration. But what's behind all this and how does it help users if there are already tools that can calibrate monitors? The answer to the latter one is: you typically do not calibrate your monitor but the graphics adapter inside your PC - except you have a monitor with internal LUTs and calibration software like basiccolor display that knows how to handle these.&lt;br /&gt;&lt;br /&gt;Before continuing here, we should talk about the displays. There are actually only a few displays that have an internal LUT - oh, wait, no: they allow setting the internal LUT - probably every display has an internal LUT. But the ones that expose them are typically high-end displays. The LUT of the monitor can then be set either via the monitor cable (VGA, DVI, whatever) or with a separate USB connection. The monitor cable solution was chosen by NEC whereas Eizo decided a USB connection would be better.&lt;br /&gt;&lt;br /&gt;But what's the benefit of exposing the monitor's internal LUT? Well, the LUT is already used to adapt the TFT panel to a curve that is approximately what the user expects (sRGB) - therefore it's quite obvious that using only one LUT in the data flow can provide much better quality than one LUT inside the video card and another one in the monitor. Another advantage is the higher bit depth of the monitor internal LUTs - they are typically 10-12bits per channel (red, green and blue) whereas the LUT inside the video card is already limited by the 8bit nature of current operating systems and the DVI connection to the display that is also 8bits.&lt;br /&gt;&lt;br /&gt;Still, this is just a rough overview for what I wanted to say: There's a demand for setting the monitor LUTs from operating systems for improved fidelity. This would be the much better alternative to monitor calibration loaders like xcalib and dispwin.&lt;br /&gt;&lt;br /&gt;The first step is done already (at least for high-end NEC monitors): The protocol that NEC uses to set (and get) the LUTs of the display is DDC/CI, which is again based on the standard I2C bus protocol. A DDC/CI tool is also alread in place, &lt;a href="http://ddccontrol.sourceforge.net"&gt;ddccontrol&lt;/a&gt;. I hope that the folks working on this tool know that their work could be used for much more. Let's wait and see!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-578294747818598743?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/578294747818598743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=578294747818598743' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/578294747818598743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/578294747818598743'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2008/02/monitors-with-internal-luts.html' title='Monitors with internal LUTs'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-2406130301211165916</id><published>2007-11-24T14:42:00.000+01:00</published><updated>2007-11-24T14:53:59.613+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcalib'/><category scheme='http://www.blogger.com/atom/ns#' term='screensaver'/><title type='text'>xcalib and Linux screen savers - Part 2</title><content type='html'>In my recent post I recommended to use the notification methods of the screen savers for reloading the LUTs when the screen saver unblanks. I got a report that the method below does not work with the gnome screen saver - probably because of a problem in gnome screen saver.&lt;br /&gt;&lt;br /&gt;The question is: what did gnome screen saver wrong - I don't know (I haven't tested it myself) but I guess it's a timing problem and the way gnome screen saver activates and deactivates. All the following applies only to gnome screen saver and not to e.g. xscreensaver. When the screen saver blanks it dims the screen to fade to the nice graphics that appear little later. For this fading the screen saver uses the LUTs -  ouch - they were altered by xcalib for a reason before! When the user moves the mouse, the screen saver fades again to the desktop. At the same time it sends the message via D-Bus that it unblanks and xcalib can step in with the script, mentioned in the previous post. However, fading has not finished and at its end the LUTs are set to their default value.&lt;br /&gt;&lt;br /&gt;One solution for this is to add a delay in the script of the previous post so that xcalib is started when the screen saver has finished its unblanking task.&lt;br /&gt;The other solution is to apply a patch that is mentioned &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=342850"&gt;here&lt;/a&gt; which saves the LUTs inside gnome screen saver and reloads them when unblanking is finished. I hope this patch is integrated into gnome screen saver so we don't have to worry about these problems anymore.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-2406130301211165916?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/2406130301211165916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=2406130301211165916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/2406130301211165916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/2406130301211165916'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/11/xcalib-and-linux-screen-savers-part-2.html' title='xcalib and Linux screen savers - Part 2'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-5064787773622986126</id><published>2007-10-31T12:10:00.000+01:00</published><updated>2007-10-31T12:26:13.558+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcalib'/><category scheme='http://www.blogger.com/atom/ns#' term='ArgyllCMS'/><category scheme='http://www.blogger.com/atom/ns#' term='screensaver'/><title type='text'>xcalib and Linux screen savers</title><content type='html'>I was asked how you can start xcalib when the Linux screen saver deactivates.&lt;br /&gt;&lt;br /&gt;Let's first talk about what the reason for this question may have been: Probably the screen saver alters the LUTs and resets them to their default value. It could also be possible that a 3D screen saver does some weird things with the LUTs. In any case, it seems like some screen savers require to load the LUTs again after the screen saver is disabled.&lt;br /&gt;&lt;br /&gt;Unfortunately, there's no single screen saver program on Linux. There is the good old xscreensaver and the rather new gnome-screensaver. The later one supports D-Bus, so we can monitor a certain signal and issue the xcalib command when the screen saver deactivates. For the first one unfortunately no D-Bus signals exist (there's only a &lt;a href="http://blog.eikke.com/index.php/ikke/2005/01/08/dbus_ified_xscreensaver"&gt;hack&lt;/a&gt; which is not integrated in the current xscreensaver).&lt;br /&gt;&lt;br /&gt;So let's try to modify the FAQ Perl scripts of both screensavers for running xcalib when the screensaver unblanks.&lt;br /&gt;&lt;br /&gt;xscrensaver:&lt;br /&gt;&lt;pre&gt;#!/usr/bin/perl&lt;br /&gt;my &lt;tt&gt;$blanked&lt;/tt&gt; = 0;&lt;br /&gt;open (IN, "xscreensaver-command -watch |");&lt;br /&gt;while (&lt;in&gt;) {&lt;br /&gt; if (m/^(BLANK|LOCK)/) {&lt;br /&gt;   if (!&lt;tt&gt;$blanked&lt;/tt&gt;) {&lt;br /&gt; &lt;tt&gt;     $blanked&lt;/tt&gt; = 1;&lt;br /&gt;    }&lt;br /&gt;  } elsif (m/^UNBLANK/) {&lt;br /&gt;    system "xcalib myprofile.icm";&lt;br /&gt; &lt;tt&gt;   $blanked&lt;/tt&gt; = 0;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;gnome-screensaver:&lt;br /&gt;&lt;pre&gt;#!/usr/bin/perl&lt;br /&gt;my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='SessionIdleChanged'\"";&lt;br /&gt;&lt;span class="anchor" id="line-144"&gt;&lt;/span&gt;open (IN, "$cmd |");&lt;br /&gt;&lt;span class="anchor" id="line-146"&gt;&lt;/span&gt;while (&lt;in&gt;) {&lt;br /&gt;&lt;span class="anchor" id="line-147"&gt;&lt;/span&gt;  if (m/^\s+boolean true/) {&lt;br /&gt;&lt;span class="anchor" id="line-149"&gt;&lt;/span&gt;  } elsif (m/^\s+boolean false/) {&lt;br /&gt;&lt;span class="anchor" id="line-150"&gt;&lt;/span&gt;    system "xcalib myprofile.icm";&lt;br /&gt;&lt;span class="anchor" id="line-151"&gt;&lt;/span&gt;  }&lt;br /&gt;&lt;span class="anchor" id="line-152"&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/pre&gt;I must admit that I haven't checked the scripts - but keep me informed if they don't work and I will modify them. As always, it should work with dispwin as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-5064787773622986126?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/5064787773622986126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=5064787773622986126' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/5064787773622986126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/5064787773622986126'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/10/xcalib-and-linux-screen-savers.html' title='xcalib and Linux screen savers'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-8376093663902181736</id><published>2007-10-28T14:31:00.001+01:00</published><updated>2007-10-28T14:56:51.799+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ArgyllCMS'/><title type='text'>Compiling ArgyllCMS on Ubuntu 7.10 Gutsy Gibbon</title><content type='html'>That's my log of what I had to do to build ArgyllCMS 0.7b7  from source on my laptop with Ubuntu 7.10.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;add yourself to the src group&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# sudo vim /etc/group&lt;/span&gt;&lt;br /&gt;change the line&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;src:x:40:&lt;/span&gt;&lt;br /&gt;to&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;src:x:40:yourusername&lt;/span&gt;&lt;br /&gt;note that yourusername is just a placeholder for your Ubuntu username&lt;/li&gt;&lt;li&gt;install the jam build tool - use FTJam&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# sudo apt-get install ftjam&lt;/span&gt;&lt;/li&gt;&lt;li&gt;install the X11 XVidMode development package&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# sudo apt-get install libxxf86vm-dev&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;create a directory for Argyll in /usr/src , e.g.&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# mkdir argyllcms&lt;/span&gt;&lt;br /&gt;and enter it&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# cd argyllcms&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;download latest Argyll version (use a beta version if available)&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# wget http://www.argyllcms.com/argyllV0.70Beta7_src.zip&lt;/span&gt;&lt;br /&gt;Always watch out on the Argyll website (&lt;a href="http://www.argyllcms.com"&gt;http://www.argyllcms.com&lt;/a&gt;) what the latest version is and exchange the name in the above command&lt;/li&gt;&lt;li&gt;unzip the downloaded file - watch out: there's no folder created and the content is extracted into your current directory!&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# unzip argyllV0.70Beta7_src.zip&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Run the build script&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# sh makeall.ksh&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Now you should have your own Argyll binaries in the respective subfolders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-8376093663902181736?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/8376093663902181736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=8376093663902181736' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/8376093663902181736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/8376093663902181736'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/10/compiling-argyllcms-on-ubuntu-710-gutsy.html' title='Compiling ArgyllCMS on Ubuntu 7.10 Gutsy Gibbon'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-2558593500587100909</id><published>2007-09-07T22:12:00.000+02:00</published><updated>2007-09-07T22:14:47.425+02:00</updated><title type='text'>LUTs and XV</title><content type='html'>When browsing the internet I stumpled across &lt;a href="http://lists.freedesktop.org/archives/xorg/2007-August/027412.html"&gt;this article&lt;/a&gt;. In summary, Xv does currently bypass the video card's LUTs in most cases. Tools like dispwin and xcalib have no effect.&lt;br /&gt;&lt;br /&gt;It seems to me - after reading the entire thread - that these guys are willing to add hooks for color-management. Let's see what the result will be!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-2558593500587100909?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/2558593500587100909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=2558593500587100909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/2558593500587100909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/2558593500587100909'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/09/luts-and-xv.html' title='LUTs and XV'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-1065992507962031988</id><published>2007-09-07T22:01:00.000+02:00</published><updated>2007-09-07T22:06:01.686+02:00</updated><title type='text'>X-Rite DTP-94</title><content type='html'>Finally I got my brand-new X-Rite DTP-94. Actually it's a Monaco Optix XR - but I don't really care what software came with it since I wanted to use it to test the open-source ICC monitor profile creation programs: &lt;a href="http://www.argyllcms.com"&gt;Argyll&lt;/a&gt; and &lt;a href="http://lprof.sourceforge.net"&gt;Lprof&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I ordered it from the US since here in Germany these devices are really expensive. Now I paid 129$ + tax + shipping + customs + whatever = ~150€ - no more a bargain ;-(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-1065992507962031988?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/1065992507962031988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=1065992507962031988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/1065992507962031988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/1065992507962031988'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/09/x-rite-dtp-94.html' title='X-Rite DTP-94'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-8547818014804911731</id><published>2007-08-31T20:22:00.000+02:00</published><updated>2007-08-31T20:24:31.841+02:00</updated><title type='text'>Spyder2 device under Linux</title><content type='html'>Just wanted to mention that there's an effort going on for making the Spyder device work under Linux. This guy came already quite close and can read measurements from the device - however, the data format seems to be unclear at the moment of writing these lines. Here's the URL btw.: &lt;a href="http://www.yan-ke.com/spyder/"&gt;http://www.yan-ke.com/spyder/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-8547818014804911731?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/8547818014804911731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=8547818014804911731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/8547818014804911731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/8547818014804911731'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/spyder2-device-under-linux.html' title='Spyder2 device under Linux'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-826846928906930943</id><published>2007-08-28T22:48:00.000+02:00</published><updated>2007-08-28T23:07:42.528+02:00</updated><title type='text'>Ideas on "remote monitor profiling"</title><content type='html'>Recently I was exchanging e-mails with some french fellows that use xcalib under Linux in a professional environment. They are using a &lt;span style="font-style: italic;"&gt;remote monitor profiling&lt;/span&gt; trick.&lt;br /&gt;&lt;br /&gt;Okay, how does it basically work:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;They have one Windows laptop, running a ICC profile generation software. On this laptop a VNC server is running. A colorimeter is attached.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There' the Linux PC with the to-be-profiled monitor attached. It has a VNC client installed, displaying the Windows screen.&lt;/li&gt;&lt;/ol&gt;They are then running the profile generation software and get a valid profile for the Linux PC out of this process.&lt;br /&gt;&lt;br /&gt;I'm still not completely sure whether xcalib should be involved somewhere in this process (I tend to think that the Linux PC is not calibrated when the attached display is profiled). But I have an idea:&lt;br /&gt;&lt;br /&gt;What about intercepting the Windows calls to&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BOOL WINAPI GetDeviceGammaRamp(HDC hDC, LPVOID lpRamp );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BOOL WINAPI SetDeviceGammaRamp(HDC hDC, LPVOID lpRamp );&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Whenver one of these Win32-API calls is issued by the calibration software, something like an RPC is issued to the Linux PC which then sets the LUTs there. So what I'm trying to say is: The profiling software is running on the Windows laptop but calibrates and profiles the Linux PC and the attached monitor.&lt;br /&gt;&lt;br /&gt;Since I'm not too familiar with RPC I would probably do it with ssh - the Windows PC has the right key to connect to all to-be-profiled Linux-PCs and calls xcalib there. Okay, xcalib can't do it currently, but that's not a big deal to extend it for a &lt;span style="font-style: italic;"&gt;read from stdin&lt;/span&gt; feature.&lt;br /&gt;&lt;br /&gt;The same with intercepting: I have never done it before. Don't know whether it's easy to do it. But as soon as time permits I will probably try it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-826846928906930943?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/826846928906930943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=826846928906930943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/826846928906930943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/826846928906930943'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/ideas-on-remote-monitor-profiling.html' title='Ideas on &quot;remote monitor profiling&quot;'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-880778428609999470</id><published>2007-08-27T01:09:00.000+02:00</published><updated>2007-08-27T01:15:58.311+02:00</updated><title type='text'>mcalib</title><content type='html'>I just came across a new program called mcalib (hm, does this have to do something with xcalib?).&lt;br /&gt;&lt;br /&gt;It is a calibration utility capable of calibrating monitors with the Pantone Huey colorimeter. This guy reverse-engineered the USB protocol  of the Huey. Good job!&lt;br /&gt;&lt;br /&gt;I must admit that I have no idea how good the Huey really is - but it's relatively cheap and I will probably go for one and extend my collection of colorimeters.&lt;br /&gt;&lt;br /&gt;So far no real colorimetry is involved and mcalib only uses the video LUTs for making the display linear and so on ... But it's a good foundation and the code could be possibly integrated into ArgyllCMS.&lt;br /&gt;&lt;br /&gt;Here's the link btw.: &lt;a href="http://sourceforge.net/projects/mcalib" target="_blank"&gt;http://sourceforge.net/projects/mcalib&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-880778428609999470?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/880778428609999470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=880778428609999470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/880778428609999470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/880778428609999470'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/mcalib.html' title='mcalib'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-142401929341557432</id><published>2007-08-27T01:02:00.000+02:00</published><updated>2007-08-27T01:06:55.058+02:00</updated><title type='text'>xcalib v0.8 release</title><content type='html'>Some french fellows mailed me that xcalib doesnt work with high-end video cards which use &gt;8bit LUTs. Okay, I had to add interpolation.&lt;br /&gt;&lt;br /&gt;Before this happened bleader and gl.tter sent me patches for multi-monitor support. Now ATI FGLRX users and Windows users should benefit from these patches and be able to set the LUTs per display (if the hardware supports this).&lt;br /&gt;&lt;br /&gt;This resulted in a new xcalib version that you can download from&lt;br /&gt;&lt;a href="http://www.etg.e-technik.uni-erlangen.de/web/doe/xcalib"&gt;http://www.etg.e-technik.uni-erlangen.de/web/doe/xcalib&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-142401929341557432?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/142401929341557432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=142401929341557432' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/142401929341557432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/142401929341557432'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/xcalib-v08-release.html' title='xcalib v0.8 release'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-4287471661949134333</id><published>2007-08-13T13:04:00.000+02:00</published><updated>2007-08-28T22:47:23.783+02:00</updated><title type='text'>Mozilla adds color-management</title><content type='html'>Good news! Mozilla added color-management to Firefox 3.0a7. I instantly downloaded this version and tried it with my Win32 laptop: Hey, it works! There's a test on the ICC website ( &lt;a href="http://www.color.org/version4html.xalter"&gt;http://www.color.org/version4html.xalter&lt;/a&gt; ) and Firefox passed it.&lt;br /&gt;&lt;br /&gt;I was looking a little into the code changes and they are using LittleCMS for color-correction. So how can it be enabled?&lt;br /&gt;&lt;br /&gt;Open about:config in Firefox 3.0a7 and set &lt;span style="font-family:courier new;"&gt;gfx.color_management.enabled&lt;/span&gt; to true.&lt;br /&gt;&lt;br /&gt;Then either the monitor  profile set in &lt;span style="font-family:courier new;"&gt;gfx.color_management.display_profile&lt;/span&gt; is used or then as a fallback the one provided by the system (already implemented?) and if even then no profile was found the sRGB profile integrated into LCMS is used.&lt;br /&gt;&lt;br /&gt;There's a bug asscoiated with this new feature: &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=16769"&gt;https://bugzilla.mozilla.org/show_bug.cgi?id=16769&lt;/a&gt; . There a lot of information can be found of what is working and what not - I will read it completely later ;-)&lt;br /&gt;&lt;br /&gt;One of the problems seems to be that plugins (Flash!) are currently not aware of it and so it may be hard  to get the same color in HTML and Flash.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-4287471661949134333?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/4287471661949134333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=4287471661949134333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/4287471661949134333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/4287471661949134333'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/mozilla-adds-color-management.html' title='Mozilla adds color-management'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-1894051898186260908</id><published>2007-08-13T11:21:00.000+02:00</published><updated>2007-08-31T21:22:02.818+02:00</updated><title type='text'>CVSpyder.dll API description</title><content type='html'>For quite a while I own a Spyder2 colorimeter. I mainly use it for color-calibration with the provided software but was always keen on using it together with open-source software.&lt;br /&gt;&lt;br /&gt;There is an open-source project called ColorimetreHCFR (a french home-cinema-enthusiasts TV calibration software). They are (ab)using CVSpyder.dll, a Win32-dynamic-link-library that comes with some Colorvision products. With this dll an external program can access the colorimeter and make measurements.&lt;br /&gt;&lt;br /&gt;I digged a little deeper and found the first project doing so: S2Fly . This program just makes reads and displays the measured values on the screen. However, the author seems to be no more active.&lt;br /&gt;&lt;br /&gt;But then few weeks ago I found ColorAxis - a small program which makes reads using this dll and is open-source. Unfortunately it's written in VisualBasic - a programming language I'm not at all familiar with. You can find it at &lt;a href="http://coloraxis.sf.net/"&gt;http://coloraxis.sf.net&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;Okay, I thought let's do it and re-engineer the API for using it in C/C++ programs. And here it is:&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;/* re-engineered header file for CVSypder.dll&lt;br /&gt;* (c) 2007 Stefan Döhla, published under GPLv2&lt;br /&gt;*&lt;br /&gt;* API blatanly stolen from ColorAxis VB code&lt;br /&gt;* see http://coloraxis.sf.net for ColorAxis details&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#ifndef __CV_SYPDER_H__&lt;br /&gt;#define __CV_SPYDER_H__ __CV_SPYDER_H__&lt;br /&gt;&lt;br /&gt;#define CV_STATUS_SUCCESS  0x01&lt;br /&gt;#define CV_STATUS_FAILURE  0x00&lt;br /&gt;&lt;br /&gt;#define CV_ERROR_API       0x00&lt;br /&gt;#define CV_ERROR_SYSTEM    0x01&lt;br /&gt;&lt;br /&gt;#define CV_ERROR_NOT_INITIALIZED       0x00010001&lt;br /&gt;#define CV_ERROR_INVALID_PARAMETER     0x00010002&lt;br /&gt;#define CV_ERROR_REFRESH_UNDETERMINED  0x00010003&lt;br /&gt;#define CV_ERROR_TRANSMISSION_ERROR    0x00010004&lt;br /&gt;#define CV_ERROR_XLNX_NOT_CONFIGURED   0x00010005&lt;br /&gt;#define CV_ERROR_TIMEOUT               0x00010006&lt;br /&gt;#define CV_LAST_FATAL_ERROR            0x0001ffff&lt;br /&gt;&lt;br /&gt;#define CV_WARNING_ALREADY_INITIALIZED 0x00020001&lt;br /&gt;#define CV_WARNING_TRIGGER_TIMEOUT     0x00020002&lt;br /&gt;#define CV_WARNING_OVERALL_TIMEOUT     0x00020003&lt;br /&gt;#define CV_WARNING_APPARENTLY_NOT_CRT  0x00020004&lt;br /&gt;#define CV_WARNING_NO_CRT_CALIBRATION  0x00020005&lt;br /&gt;#define CV_WARNING_NO_LCD_CALIBRATION  0x00020006&lt;br /&gt;#define CV_WARNING_NO_TOK_CALIBRATION  0x00020007&lt;br /&gt;&lt;br /&gt;#define CV_XILINX_CONFIGURED          0x00&lt;br /&gt;#define CV_XILINX_READY_FOR_DOWNLOAD  0x01&lt;br /&gt;#define CV_XILINX_UNCONFIGURED        0x02&lt;br /&gt;#define CV_XILINX_QUERY_ERROR         0x03&lt;br /&gt;&lt;br /&gt;#define CV_SCREENTYPE_CRT             0x01&lt;br /&gt;#define CV_SCREENTYPE_LCD             0x02&lt;br /&gt;&lt;br /&gt;#define CV_SERIAL_NUMBER_LEN          0x08&lt;br /&gt;&lt;br /&gt;typedef unsigned char CV_STATUS;&lt;br /&gt;typedef unsigned long CV_MESSAGE;&lt;br /&gt;typedef unsigned short CV_SCREENTYPE;&lt;br /&gt;typedef struct&lt;br /&gt;{&lt;br /&gt;unsigned short DriverVersion;&lt;br /&gt;unsigned short HardwareVersion;&lt;br /&gt;unsigned char  SerialNumber[CV_SERIAL_NUMBER_LEN];&lt;br /&gt;} CV_VendorData;&lt;br /&gt;&lt;br /&gt;#define DLL_IMPORT __declspec(dllimport)&lt;br /&gt;#define CALLING_CONVENTION _cdecl&lt;br /&gt;&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;extern "C" {&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;DLL_IMPORT CV_STATUS CALLING_CONVENTION CV_Startup(CV_VendorData * vendorData, unsigned int tmp, unsigned int tmp2);&lt;br /&gt;&lt;br /&gt;DLL_IMPORT CV_STATUS CALLING_CONVENTION CV_GetRefreshRate(unsigned long * rate);&lt;br /&gt;&lt;br /&gt;DLL_IMPORT CV_STATUS CALLING_CONVENTION CV_GetXYZ(unsigned short nFrames,&lt;br /&gt;                             long * X,&lt;br /&gt;                             long * Y,&lt;br /&gt;                             long * Z);&lt;br /&gt;&lt;br /&gt;DLL_IMPORT CV_STATUS CALLING_CONVENTION CV_GetXYZEx(unsigned short nFrames,&lt;br /&gt;                                 long * X,&lt;br /&gt;                                 long * Y,&lt;br /&gt;                                 long * Z,&lt;br /&gt;                                 unsigned char dolevel2);&lt;br /&gt;&lt;br /&gt;DLL_IMPORT CV_MESSAGE CALLING_CONVENTION CV_GetDetailedError(unsigned char * systemError);&lt;br /&gt;&lt;br /&gt;DLL_IMPORT CV_STATUS CALLING_CONVENTION CV_UseCalibration(CV_SCREENTYPE screenType);&lt;br /&gt;&lt;br /&gt;DLL_IMPORT void CALLING_CONVENTION CV_Shutdown(void);&lt;br /&gt;&lt;br /&gt;#ifdef __cplusplus&lt;br /&gt;}&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#endif /* __CV_SPYDER_H__ */&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This header file can be used to create either a lib (you need to create stub functions and so on - all the nasty tricks) or use it as a template to DLLImport the functions from CVSpyder.dll .&lt;br /&gt;&lt;br /&gt;I tested it with a small program (that includes Bruce Lindbloom's color conversion code at the beginning):&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;/* test for for CVSypder.dll-usage&lt;br /&gt;* (c) 2007 Stefan Döhla, published under GPLv2&lt;br /&gt;*&lt;br /&gt;* XYZ-&gt;RGB conversion blatanly stolen from Bruce Lindbloom&lt;br /&gt;* see http://www.brucelindbloom.com/index.html?Eqn_XYZ_to_T.html&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;#include "cvspyder.h"&lt;br /&gt;&lt;br /&gt;#include &lt;float.h&gt;&lt;br /&gt;#include &lt;math.h&gt;&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;/* LERP(a,b,c) = linear interpolation macro, is 'a' when c == 0.0 and 'b' when c == 1.0 */&lt;br /&gt;#define LERP(a,b,c)     (((b) - (a)) * (c) + (a))&lt;br /&gt;&lt;br /&gt;typedef struct UVT {&lt;br /&gt;      double  u;&lt;br /&gt;      double  v;&lt;br /&gt;      double  t;&lt;br /&gt;} UVT;&lt;br /&gt;&lt;br /&gt;double rt[31] = {       /* reciprocal temperature (K) */&lt;br /&gt;       DBL_MIN,  10.0e-6,  20.0e-6,  30.0e-6,  40.0e-6,  50.0e-6,&lt;br /&gt;       60.0e-6,  70.0e-6,  80.0e-6,  90.0e-6, 100.0e-6, 125.0e-6,&lt;br /&gt;      150.0e-6, 175.0e-6, 200.0e-6, 225.0e-6, 250.0e-6, 275.0e-6,&lt;br /&gt;      300.0e-6, 325.0e-6, 350.0e-6, 375.0e-6, 400.0e-6, 425.0e-6,&lt;br /&gt;      450.0e-6, 475.0e-6, 500.0e-6, 525.0e-6, 550.0e-6, 575.0e-6,&lt;br /&gt;      600.0e-6&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;UVT uvt[31] = {&lt;br /&gt;      {0.18006, 0.26352, -0.24341},&lt;br /&gt;      {0.18066, 0.26589, -0.25479},&lt;br /&gt;      {0.18133, 0.26846, -0.26876},&lt;br /&gt;      {0.18208, 0.27119, -0.28539},&lt;br /&gt;      {0.18293, 0.27407, -0.30470},&lt;br /&gt;      {0.18388, 0.27709, -0.32675},&lt;br /&gt;      {0.18494, 0.28021, -0.35156},&lt;br /&gt;      {0.18611, 0.28342, -0.37915},&lt;br /&gt;      {0.18740, 0.28668, -0.40955},&lt;br /&gt;      {0.18880, 0.28997, -0.44278},&lt;br /&gt;      {0.19032, 0.29326, -0.47888},&lt;br /&gt;      {0.19462, 0.30141, -0.58204},&lt;br /&gt;      {0.19962, 0.30921, -0.70471},&lt;br /&gt;      {0.20525, 0.31647, -0.84901},&lt;br /&gt;      {0.21142, 0.32312, -1.0182},&lt;br /&gt;      {0.21807, 0.32909, -1.2168},&lt;br /&gt;      {0.22511, 0.33439, -1.4512},&lt;br /&gt;      {0.23247, 0.33904, -1.7298},&lt;br /&gt;      {0.24010, 0.34308, -2.0637},&lt;br /&gt;      {0.24792, 0.34655, -2.4681},    /* Note: 0.24792 is a corrected value for the error found in W&amp;S as 0.24702 */&lt;br /&gt;      {0.25591, 0.34951, -2.9641},&lt;br /&gt;      {0.26400, 0.35200, -3.5814},&lt;br /&gt;      {0.27218, 0.35407, -4.3633},&lt;br /&gt;      {0.28039, 0.35577, -5.3762},&lt;br /&gt;      {0.28863, 0.35714, -6.7262},&lt;br /&gt;      {0.29685, 0.35823, -8.5955},&lt;br /&gt;      {0.30505, 0.35907, -11.324},&lt;br /&gt;      {0.31320, 0.35968, -15.628},&lt;br /&gt;      {0.32129, 0.36011, -23.325},&lt;br /&gt;      {0.32931, 0.36038, -40.770},&lt;br /&gt;      {0.33724, 0.36051, -116.45}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int XYZtoCorColorTemp(double X, double Y, double Z, double *temp)&lt;br /&gt;{&lt;br /&gt;        double us, vs, p, di, dm;&lt;br /&gt;        int i;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        if ((X &lt; 1.0e-20) &amp;&amp;amp; (Y &lt; 1.0e-20) &amp;&amp;amp; (Z &lt; 1.0e-20))&lt;br /&gt;                return(-1);     /* protect against possible divide-by-zero failure */&lt;br /&gt;        us = (4.0 * X) / (X + 15.0 * Y + 3.0 * Z);&lt;br /&gt;        vs = (6.0 * Y) / (X + 15.0 * Y + 3.0 * Z);&lt;br /&gt;        dm = 0.0;&lt;br /&gt;        for (i = 0; i &lt; 31; i++) {&lt;br /&gt;                di = (vs - uvt[i].v) - uvt[i].t * (us - uvt[i].u);&lt;br /&gt;                if ((i &gt; 0) &amp;&amp;amp; (((di &lt;&gt;= 0.0)) || ((di &gt;= 0.0) &amp;&amp;amp; (dm &lt; 0.0))))&lt;br /&gt;                        break;  /* found lines bounding (us, vs) : i-1 and i */&lt;br /&gt;                dm = di;&lt;br /&gt;        }&lt;br /&gt;        if (i == 31)&lt;br /&gt;                return(-1);     /* bad XYZ input, color temp would be less than minimum of 1666.7 degrees, or too far towards blue */&lt;br /&gt;        di = di / sqrt(1.0 + uvt[i    ].t * uvt[i    ].t);&lt;br /&gt;        dm = dm / sqrt(1.0 + uvt[i - 1].t * uvt[i - 1].t);&lt;br /&gt;        p = dm / (dm - di);     /* p = interpolation parameter, 0.0 : i-1, 1.0 : i */&lt;br /&gt;        p = 1.0 / (LERP(rt[i - 1], rt[i], p));&lt;br /&gt;        *temp = p;&lt;br /&gt;        return(0);      /* success */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int __cdecl main(int argc, char ** argv)&lt;br /&gt;{&lt;br /&gt;  CV_VendorData data = {0};&lt;br /&gt;  CV_STATUS status = CV_STATUS_SUCCESS;&lt;br /&gt;  CV_MESSAGE message;&lt;br /&gt;  unsigned long rate = 0;&lt;br /&gt;  long Xlong=0, Ylong=0, Zlong=0;&lt;br /&gt;  double X=0.0, Y=0.0, Z=0.0;&lt;br /&gt;  double x=0.0, y=0.0;&lt;br /&gt;  double colorTemperature = 0.0;&lt;br /&gt;&lt;br /&gt;  status = CV_Startup(&amp;data, 1, 1);&lt;br /&gt;  if(status != CV_STATUS_SUCCESS)&lt;br /&gt;    message = CV_GetDetailedError(&amp;status);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  status = CV_GetRefreshRate(&amp;rate);&lt;br /&gt;  if(status != CV_STATUS_SUCCESS)&lt;br /&gt;    message = CV_GetDetailedError(&amp;status);&lt;br /&gt; &lt;br /&gt;  if(message == CV_WARNING_APPARENTLY_NOT_CRT)&lt;br /&gt;    status = CV_UseCalibration(CV_SCREENTYPE_LCD);&lt;br /&gt;  else&lt;br /&gt;    status = CV_UseCalibration(CV_SCREENTYPE_CRT);&lt;br /&gt;  if(status != CV_STATUS_SUCCESS)&lt;br /&gt;    message = CV_GetDetailedError(&amp;status);&lt;br /&gt;   &lt;br /&gt;  status = CV_GetXYZ(300, &amp;Xlong, &amp;amp;Ylong, &amp;Zlong);&lt;br /&gt;  if(status != CV_STATUS_SUCCESS)&lt;br /&gt;    message = CV_GetDetailedError(&amp;status);&lt;br /&gt;&lt;br /&gt;  X=(double)Xlong/1000.0;&lt;br /&gt;  Y=(double)Ylong/1000.0;&lt;br /&gt;  Z=(double)Zlong/1000.0;&lt;br /&gt;&lt;br /&gt;  x = X / (X+Y+Z);&lt;br /&gt;  y = Y / (X+Y+Z);&lt;br /&gt;&lt;br /&gt;  XYZtoCorColorTemp(X, Y, Z, &amp;colorTemperature);&lt;br /&gt;&lt;br /&gt;  CV_Shutdown();&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As you see it's not that complicated making measurements with the CVSpyder API. It's important that one calls the functions in this order&lt;br /&gt;&lt;ol style="font-family: courier new;"&gt;&lt;li&gt;CV_Startup&lt;/li&gt;&lt;li&gt;CV_GetRefreshRate&lt;/li&gt;&lt;li&gt;CV_UseCalibration&lt;/li&gt;&lt;li&gt;CV_GetXYZ&lt;/li&gt;&lt;li&gt;CV_Shutdown&lt;/li&gt;&lt;/ol&gt;Initially I got bad reads because I haven't called &lt;span style="font-family:courier new;"&gt;CV_UseCalibration&lt;/span&gt; - there are weird results then!&lt;br /&gt;&lt;br /&gt;Maybe I can manage to integrate this API into some open-source monitor calibration projects (argyll/lprof) but honestly, I'd be happier if the USB protocol can be hacked (maybe with the help of this API).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-1894051898186260908?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/1894051898186260908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=1894051898186260908' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/1894051898186260908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/1894051898186260908'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/cvspyderdll-api-description.html' title='CVSpyder.dll API description'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2359733660078938387.post-2751076739543435824</id><published>2007-08-13T10:40:00.001+02:00</published><updated>2007-08-13T10:45:41.186+02:00</updated><title type='text'>My first blog entry</title><content type='html'>Hello dear readers,&lt;br /&gt;&lt;br /&gt;this is my first blog. I hope that I'm able to share some useful information about color-management with the internet community from time to time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2359733660078938387-2751076739543435824?l=colorhacks.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://colorhacks.blogspot.com/feeds/2751076739543435824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2359733660078938387&amp;postID=2751076739543435824' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/2751076739543435824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2359733660078938387/posts/default/2751076739543435824'/><link rel='alternate' type='text/html' href='http://colorhacks.blogspot.com/2007/08/my-first-blog-entry.html' title='My first blog entry'/><author><name>Stefan Döhla</name><uri>http://www.blogger.com/profile/11151411055946309721</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
