对于一幅图(TIF ,RGB模式)如何处理为(TIF,CMYK)呢?
解决方案 »
- 录入数据校验问题
- qreport中的Onneeddata事件怎么使用
- 有关ComboBox.AddItem的奇怪用法
- 我在实习!急啊!
- 实现象windows点选的功能,我动态创建了一些PANEL,当压住CTRL的时候可以连续的选PANEL,PANEL的颜色
- 如何获得键盘按健按下后,判断是什么健???
- 新手问题:在数据模块中使用TStoredProc调用存储过程,运行时报错:error creating cursor handle -急
- 关于系统字体的简单问题,麻烦了,在线等待
- 怎样保证当我的窗口大小变化时,各个控件的相对位置不变啊?
- 请教luhongjun(过江项羽): CreateProcess问题:
- 哪位高手知道如何模拟对一个的文件的双击?
- 我在使用dbExpress里面的控件就报错.
G : byte;
B : byte;
var C : byte;
var M : byte;
var Y : byte;
var K : byte);
begin
C := 255 - R;
M := 255 - G;
Y := 255 - B;
if C < M then
K := C else
K := M;
if Y < K then
K := Y;
if k > 0 then begin
c := c - k;
m := m - k;
y := y - k;
end;
end;procedure CMYKTORGB(C : byte;
M: byte;
Y : byte;
K : byte;
var R : byte;
var G : byte;
var B : byte);
begin
if (Integer(C) + Integer(K)) < 255 then
R := 255 - (C + K) else
R := 0;
if (Integer(M) + Integer(K)) < 255 then
G := 255 - (M + K) else
G := 0;
if (Integer(Y) + Integer(K)) < 255 then
B := 255 - (Y + K) else
B := 0;
end;procedure ColorCorrectCMYK(var C : byte;
var M : byte;
var Y : byte;
var K : byte);
var
MinColor : byte;
begin
if C < M then
MinColor := C else
MinColor := M;
if Y < MinColor then
MinColor := Y;
if MinColor + K > 255 then
MinColor := 255 - K;
C := C - MinColor;
M := M - MinColor;
Y := Y - MinColor;
K := K + MinColor;
end;procedure TForm1.Button1Click(Sender: TObject);
var
R : byte;
G : byte;
B : byte;
C : byte;
M : byte;
Y : byte;
K : byte;
begin
R := 151;
G := 81;
B := 55;
Memo1.Lines.Add('R = ' + IntToStr(R));
Memo1.Lines.Add('G = ' + IntToStr(G));
Memo1.Lines.Add('B = ' + IntToStr(B));
Memo1.Lines.Add('-------------------');
RGBTOCMYK(R, G, B, C, M, Y, K);
Memo1.Lines.Add('C = ' + IntToStr(C));
Memo1.Lines.Add('M = ' + IntToStr(M));
Memo1.Lines.Add('Y = ' + IntToStr(Y));
Memo1.Lines.Add('K = ' + IntToStr(K));
Memo1.Lines.Add('-------------------');
CMYKTORGB(C, M, Y, K, R, G, B);
Memo1.Lines.Add('R = ' + IntToStr(R));
Memo1.Lines.Add('G = ' + IntToStr(G));
Memo1.Lines.Add('B = ' + IntToStr(B));
Memo1.Lines.Add('-------------------');
RGBTOCMYK(R, G, B, C, M, Y, K);
c := c + 2;
m := m + 2;
y := y + 2;
ColorCorrectCMYK(C, M, Y, K);
Memo1.Lines.Add('C = ' + IntToStr(C));
Memo1.Lines.Add('M = ' + IntToStr(M));
Memo1.Lines.Add('Y = ' + IntToStr(Y));
Memo1.Lines.Add('K = ' + IntToStr(K));
end;
RGB -> CMYK | CMYK -> RGB
Black=minimum(1-Red,1-Green,1-Blue) | Red=1-minimum(1,Cyan*(1-Black)+Black)
Cyan=(1-Red-Black)/(1-Black) | Green=1-minimum(1,Magenta*(1-Black)+Black)
Magenta=(1-Green-Black)/(1-Black) | Blue=1-minimum(1,Yellow*(1-Black)+Black)
Yellow=(1-Blue-Black)/(1-Black) | Of course, I assume that C, M, Y, K, R, G, and B have a range of [0;1].(2)RGB -> CIE XYZitu (D65):
|X| |0.430574 0.341550 0.178325| |Red |
|Y| = |0.222015 0.706655 0.071330| * |Green|
|Z| |0.020183 0.129553 0.939180| |Blue |(3)CIE XYZ -> CIE Lab
{ L=116*((Y/Yn)^(1/3)) whether Y/Yn>0.008856
{ L=903.3*Y/Yn whether Y/Yn<=0.008856
a=500*(f(X/Xn)-f(Y/Yn))
b=200*(f(Y/Yn)-f(Z/Zn))
where { f(t)=t^(1/3) whether Y/Yn>0.008856
{ f(t)=7.787*t+16/116--------------------------------------------
(参看:http://www.neuro.sfc.keio.ac.jp/~aly/polygon/info/color-space-faq.html)
这个网址我可是找了近20小时!缘由:
我本想在C#环境下开发印刷格式的300DPI CMYK TIF图像转化为RGB 72DPI 的JPG格式图像,虽然找到了公式,但仍无法得到满意的答案(主要原因是:CMYK图像读入后转RGB时严重变色,主要是变暗)。不知各位有否更好的解决方案?