怎样实现像photoshop中那样调节图片色调(Hue)???请高手回答。(100分)

  • 主题发起人 主题发起人 eliphe
  • 开始时间 开始时间
E

eliphe

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样实现像photoshop中那样调节图片色调(Hue)??

要求:给出代码。

请高手回答。
 
转到hsl空间,调节H分量,在转回到rgb颜色空间,ok
 
感谢,huazai,能不能给点代码???
 
各位大哥,快回答我呀,我很急呀。
 
按照huazai的 建议做
代码在离线包就有呀
 
离线包?太大了。

TO:journer
麻烦你帮我找一下把代码贴出来吧。

thanks.

 
你的email?我发一个例子给你看看!
 
RGB,HLS,HSV,YIQ,YCbCr,YUV ,老兄太多了。
核心代码:
RGB:
picbits[3*i+2]:=min(255,max(0,picbits[3*i+2]+scrollbar1.Position));
picbits[3*i+1]:=min(255,max(0,picbits[3*i+1]+scrollbar2.Position));
picbits[3*i+0]:=min(255,max(0,picbits[3*i+0]+scrollbar3.Position));
YCbCr:
r:=picbits[3*i-1];
g:=picbits[3*i-2];
b:=picbits[3*i-3];
y:= 0.2990*r+0.5870*g+0.1140*b+ scrollbar1.Position;
cb:=-0.1687*r-0.3313*g+0.5000*b+128+scrollbar2.Position;
cr:= 0.5000*r-0.4187*g-0.0813*b+128+scrollbar3.Position;
picbits[3*i-1]:=min(255,max(0,round(y+1.402*(cb-128))));
picbits[3*i-2]:=min(255,max(0,round(y-0.34414*(cb-128)-0.71414*(cr-128))));
picbits[3*i-3]:=min(255,max(0,round(y+1.772*(cb-128))));

YIQ:
r:=picbits[3*j-1];
g:=picbits[3*j-2];
b:=picbits[3*j-3];
Y:=0.2990*r+0.5870*g+0.1140*b+scrollbar1.Position;
I:=0.5960*r-0.2740*g-0.3220*b+scrollbar2.Position;
Q:=0.2110*r-0.5230*g+0.3120*b+scrollbar3.Position;
picbits[3*j-1]:=min(255,max(0,round(y+0.9560*I+0.6210*Q)));
picbits[3*j-2]:=min(255,max(0,round(y-0.2720*I-0.6470*Q)));
picbits[3*j-3]:=min(255,max(0,round(y-1.1060*I-1.7030*Q)));
YUV:
r:=picbits[3*i-1];
g:=picbits[3*i-2];
b:=picbits[3*i-3];
y:= 0.2990*r+0.5870*g+0.1140*b+scrollbar1.Position;
u:=-0.1480*r-0.2890*g+0.4370*b+scrollbar2.Position;
v:= 0.6150*r-0.5150*g-0.1000*b+scrollbar3.Position;
picbits[3*i-1]:=min(255,max(0,round(y+1.1402*v)));
picbits[3*i-2]:=min(255,max(0,round(y-0.3950*u-0.5810*v)));
picbits[3*i-3]:=min(255,max(0,round(y+2.0320*u)));
.....................
 
人家看得有点晕头啊
 
TO:huazai

my email:cafre@sina.com

thank you.
 
picbits数组保存了原图像的rgb值,然后与yuv,ycbcr,换算,在得到对应的rgb值.
应该能看出来吧,细细看,不会头晕的.

 
我按照

huazai, 时间:2003-8-3 17:16:00, ID:2080816
转到hsl空间,调节H分量,在转回到rgb颜色空间,ok

的提示写了一个
------------------------------------------------------------------------------
//调整色调,SrcBmp输入,DestBmp输出
procedure HueChange(SrcBmp,DestBmp:TBitmap;ValueChange:integer);
var
i, j: integer;
SrcRow, DestRow: pRGBArray;
R,G,B:Integer;
H,S,L:Integer;
begin
for i := 0 to SrcBmp.Height - 1 do
begin
SrcRow := SrcBmp.ScanLine;
DestRow := DestBmp.ScanLine;

for j:=0 to SrcBmp.Width-1 do
begin
R:=SrcRow[j].rgbtRed;
G:=SrcRow[j].rgbtGreen;
B:=SrcRow[j].rgbtBlue;

H:=0;
L:=0;
S:=0;

RGBtoHLS(R,G,B,H,L,S);
H:=H+ValueChange;
HLStoRGB(H,L,S,R,G,B);

DestRow[j].rgbtRed:=R;
DestRow[j].rgbtGreen:=G;
DestRow[j].rgbtBlue:=B;
end;
end;
end;
------------------------------------------------------------------------------
可是发现没有反应,不知道问题出在哪里?

请高人快乐回答呀.

还有:
TO:huazai
my email:cafre@sina.com
thank you.
 
谢谢huazai,
我先看看啊.
太感谢了.

记得我上个问题也是您回答的,太感谢你了.
 
huazai,您好!
你好,看了你的例子有以下几点不明白,请指教:
1.你的例子中的hadjust是指的Hue是吧?我看了代码应该是,因为改的是H分量.
2.我把你的例子加上滚动条了,但是和photoshop中的亮度/对比度/色调改变,差别太大了,不知是什么原因,请帮助.
再次非常感谢.
我把我改了后的例子再发给你一份.
我已经给你发邮件了,请查收.
 
都又过了几天了,怎么还是没有人回答?

dbyoung,huazai怎么都不来了?

版主,你们都应该是高手,帮帮小弟吧.

 
你想调节什么?
RGB,HLS,HSV,YIQ,YCbCr,YUV 亮度,对比度,饱和度,
我认为huazai已帮你解决了.
 
哈哈,终于又有人来了:
TO:dbyoung
你有用过Photoshop吧,在Photoshop菜单的Image==>Adjustments==>Hue/Saturation打开后弹出个对话框,看上面的滚动条Hue(色调),我要调节的就是这个,要和photoshop的一样.

问题还没有解决呀,要是解决了,我早就结贴了.

huazai对我说:
至于色调,的确是和photoshop中的不一样,原理不是一样的,这个不是那么简单实现的.

希望huazai和诸位高手帮帮忙,我愿意再出100分,以作答谢.

在这里先谢谢大家了.
 
我没用过Photoshop,帮你看看,所以现在无法答复你。况且我现在不在公司。
昨天我等你回应时,你却不在。现在你在,我又不在了。
等到礼拜一吧。


 
我帮你调试好了,发给你了!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部