Welcome Guest! You need to login or register to make posts.



Go to last post Go to first unread
#1 Posted : Friday, August 27, 2004 1:49:00 AM(UTC)

Rank: Member

Groups: Member
Joined: 4/30/2004(UTC)
Posts: 16

I have an application which provides a preveiw of a badge to be printed as well as the ability to print it out, but the colors that are on the screen do not match the print very well. In general, the colors on the print seem to be darker than the preview. I am now using the bmpBitmap.ColorAdjustment.AutoBrightness, bmpBitmap.ColorAdjustment.AutoContrast, and bmpBitmap.ColorAdjustment.AutoLevels, but that does not seem to do enough. do you have any recommendations for how I can esnsure what the user see is what the user gets?

Thank you,
#2 Posted : Friday, August 27, 2004 5:34:00 PM(UTC)

Rank: Advanced Member

Groups: Member, Administration
Joined: 8/2/2003(UTC)
Posts: 863

Thanks: 2 times
Was thanked: 25 time(s) in 25 post(s)
Hello Jason,

To resolve the problem of mismatch between screen and printer, color management should be used. Before I give recommendations how to use it in Graphics Mill I would like to provide some background details.


I think it makes no sense to comment why colors are looking different on different devices. It is obvious - monitors has different characteristics, printers has inks of different mixture, etc. The same RGB or CMYK values cannot be looking at different devices in the same way. It is especially concerns the difference between monitor and printer. Colors has absolutely different nature, shortly speaking, monitor colors are mostly RGB and printer colors are in CMYK (or more complex color space). As well-known, conversion between RGB and CMYK is ambiguous. More over, some colors which can be displayed at monitor cannot be reproduced by printer and vice versa.

That leads us to the problem: how to define rules of conversion between color values of one device to values of another. If the color cannot be represented on another device, how to eliminate visual shifts.


You see the problem is quite non-trivial. To resolve it leading manufactures of products concerned with colors and imaging organized special institution: International Color Consortium (ICC). They defined a special format of files that describes a set of rules of conversing colors between colors of one device to another. Such files are known as ICC profiles.

This format is quite complex and only few software vendors has implemented support of ICC profiles. I know three implementations: Microsoft ICM, Adobe's system (used in Photoshop), and one open-source implementation. Microsoft ICM 2.0 is a part of WinAPI and Graphics Mill uses this system to provide color management.

The idea of using color management is a following:
  • We have a source image which you should to convert to another device colors, or just display.
  • We need to get a destination image which is converted to the device colors (or displayed on monitor with correct colors).

To apply a correction, we need two ICC profiles:
  1. Input profile - profile of the device where source image is considered to be looking ok.
  2. Output profile - profile of the destination device.

Color management system (e.g. Microsoft ICM 2.0) uses these profiles to calculate tables of translation colors between these device color values. After such tables are built, it applies conversion using them.

More Practice: How Does It Applicable To Graphics Mill?

As mentioned above, Graphics Mill uses Microsoft ICM 2.0. It is quite tricky system of functions, but fortunately Graphics Mill allows working with them easily with no headache.

First of all, you should enable color management. It is done with this line:

objBitmap.Data.ColorManagement.IsEnabled = True

After you have enabled color management, we should set up our profiles. As described above, for successful color conversion two profiles are necessary.

Input profile is usually embedded into the image file; most real-life JPEGs and TIFFs already have it. It is available through property DataProfile. If no profile embedded into the file, you can initalize it later, something like this:

objBitmap.Data.ColorManagement.DataProfile = "C:\WINDOWS\system32\spool\drivers\color\sRGB Color Space Profile.icm"

Output profile you should provide yourself. In your case it will be a profile of your printer (it is usually shipped with printer drivers and other enclosed software).

For output profile Graphics Mill provides three properties:
  • RgbProfile
  • CmykProfile
  • GrayscaleProfile
Each property specifies output profile for each color space supported with Graphics Mill. You may compare it with analogue settings in Photoshop.

Printer color profiles are usually designed for CMYK color space. That's why you should assign a name of the ICC profile file to CmykProfile property:

objBitmap.Data.ColorManagement.CmykProfile = "C:\WINDOWS\system32\spool\drivers\color\yourprinter.icm"

Now color management module is initialized and you are ready to start conversion.


Now bitmap is converted to the very CMYK that will be handled with printer properly. Of course, exact match will be achieved only if you provide correct color profiles. Note, standard profiles may be too inaccurate. In this case you need to make a calibration for monitor and/or the printer. But it is beyound of Graphics Mill features and duties... :)

Well... I see the post is a bit longer than I expected. ;) I omitted some details as sRGB color space, or TargetProfile property, but I hope it will be enough to help you. If not, or if something is unclear, please feel free to ask again.

Edited by user Monday, December 24, 2007 5:00:44 PM(UTC)  | Reason: Not specified

Users browsing this topic
Forum Jump  
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.