蔓
蔓草
Unregistered / Unconfirmed
GUEST, unregistred user!
我想给一个灰度图象做伪彩色变换,就象acdsee32里面
那个彩色化的功能,就是一个黑白图象,黑色的部分不变
白色的变成选择的伪彩色,中间过度,我自己想了一个算法
我认为没有问题,但是效果怎么不对呢?有时候选择黄色的
却变成兰色的了?大家帮忙我看看,真的很着急,谢谢大家!
大家看看我的算法有问题吗?
var
RedValue, GreenValue, BlueValue: integer;///要变换颜色的rgb的直
p0bytearray;
Gray,r,g,b,x,y,GrayMax: Integer;
begin
RedValue := getrvalue(cweicai.SelectionColor);
GreenValue :=getgvalue(cweicai.SelectionColor);
BlueValue := getbvalue(cweicai.SelectionColor);//得到要变换的rgb直
graymax:=0;
for y:=0 to imgpic.Picture.Bitmap.Height-1 do
begin
p0:=imgpic.Picture.Bitmap.scanline[y];
for x:=0 to imgpic.Picture.Bitmap.Width-1 do
begin
Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
if GrayMax<gray then graymax:=gray;
end;
end;////////////////////////////这里graymax得到图象上最大灰度的点灰度
for y:=0 to imgpic.Picture.Bitmap.Height-1 do
begin
p0:=imgpic.Picture.Bitmap.scanline[y];
for x:=0 to imgpic.Picture.Bitmap.Width-1 do
begin
Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
p0[x*3]:=round(RedValue*Gray/GrayMax); /////////
p0[x*3+1]:=round(GreenValue*Gray/GrayMax);//具体算法
p0[x*3+2]:=round(BlueValue*Gray/GrayMax);//////
end;
end;////////////这段给图象上假彩色
imgpic.Repaint;
那个彩色化的功能,就是一个黑白图象,黑色的部分不变
白色的变成选择的伪彩色,中间过度,我自己想了一个算法
我认为没有问题,但是效果怎么不对呢?有时候选择黄色的
却变成兰色的了?大家帮忙我看看,真的很着急,谢谢大家!
大家看看我的算法有问题吗?
var
RedValue, GreenValue, BlueValue: integer;///要变换颜色的rgb的直
p0bytearray;
Gray,r,g,b,x,y,GrayMax: Integer;
begin
RedValue := getrvalue(cweicai.SelectionColor);
GreenValue :=getgvalue(cweicai.SelectionColor);
BlueValue := getbvalue(cweicai.SelectionColor);//得到要变换的rgb直
graymax:=0;
for y:=0 to imgpic.Picture.Bitmap.Height-1 do
begin
p0:=imgpic.Picture.Bitmap.scanline[y];
for x:=0 to imgpic.Picture.Bitmap.Width-1 do
begin
Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
if GrayMax<gray then graymax:=gray;
end;
end;////////////////////////////这里graymax得到图象上最大灰度的点灰度
for y:=0 to imgpic.Picture.Bitmap.Height-1 do
begin
p0:=imgpic.Picture.Bitmap.scanline[y];
for x:=0 to imgpic.Picture.Bitmap.Width-1 do
begin
Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
p0[x*3]:=round(RedValue*Gray/GrayMax); /////////
p0[x*3+1]:=round(GreenValue*Gray/GrayMax);//具体算法
p0[x*3+2]:=round(BlueValue*Gray/GrayMax);//////
end;
end;////////////这段给图象上假彩色
imgpic.Repaint;