Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8602954
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类: C/C++

2010-01-01 23:58:49

CMYK模式属于印刷模式,而RGB属于光的三原色。CMYK采用减色法,而RGB采用加色法,网上流传的一些转换算法,在photoshop里面 打开之后发现颜色误差很大。

1).这是CMYK的色彩表:

2).对于BCB或是delphi,可以考虑采用GraphicEx,安装方法如下:

create new package.
Example GraphEx.dpk
requires
rtl,
vcl,
vcljpg;
contains
MZLib in 'MZLib.pas',
GraphicCompression in 'GraphicCompression.pas',
GraphicEx in 'GraphicEx.pas',
GraphicStrings in 'GraphicStrings.pas',
JPG in 'JPG.pas',
GraphicColor in 'GraphicColor.pas';
Then compile and install it. Now,as Design-time , drop Image1 (TImage) on Form1, you can load images (*.gif,...) in picture property of image1.
Hope you do complete .

3).网上流传的不太精确的办法是:

  void   CMYK2RGB(BYTE   C,BYTE   M,BYTE   Y,BYTE   K,BYTE&   R,BYTE&   G,BYTE&   B)  
  {  
        if   (   C   +   K   <   255   )  
              R   =   255   -   (C   +   K);  
        else  
              R   =   0;  
        if   (   M   +   K   <   255   )  
              G   =   255   -   (M   +   K);  
        else  
              G   =   0;  
        if   (   Y   +   K   <   255   )  
              B   =   255   -   (Y   +   K);  
        else  
              B   =   0;  
  } 

 

4).不过最后发现,真实的转换方法需要这样做:

var R=Math.round((1-C)*(1-K)*255);
var B=Math.round((1-Y)*(1-K)*255);
var G=Math.round((1-M)*(1-K)*255);

 

C,M,Y,K为百分比。这个贴子具有强烈的参考意义。

阅读(1643) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~