图象高手请来看看我的算法,是一个给图象上假彩色的算法,求大家指点!(50分)

  • 主题发起人 主题发起人 蔓草
  • 开始时间 开始时间

蔓草

Unregistered / Unconfirmed
GUEST, unregistred user!
我想给一个灰度图象做伪彩色变换,就象acdsee32里面
那个彩色化的功能,就是一个黑白图象,黑色的部分不变
白色的变成选择的伪彩色,中间过度,我自己想了一个算法
我认为没有问题,但是效果怎么不对呢?有时候选择黄色的
却变成兰色的了?大家帮忙我看看,真的很着急,谢谢大家!


大家看看我的算法有问题吗?

var
RedValue, GreenValue, BlueValue: integer;///要变换颜色的rgb的直
p0:pbytearray;
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;
 
这里对了,Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
你看看黄色的RGB值和蓝色的RGB差多少。
 
Chenlili:
那我应该怎么办呀!
 
又是你!
这样来 : Gray:=Round(p0[x*3+2]*0.3+p0[x*3+1]*0.59+p0[x*3]*0.11);
 
卷起千堆雪tyn:
颜色还是不对呀!
 
卷起千堆雪tyn:
非常感谢!
 

Similar threads

I
回复
0
查看
571
import
I
I
回复
0
查看
619
import
I
I
回复
0
查看
320
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部