bmp.Assign((FL_img as TImage).Picture.Bitmap);
bmp.PixelFormat:=pf24bit;
p:=bmp.ScanLine[0];
if (bmp.Height>1) then
begin
ScanlineBytes:=integer(bmp.ScanLine[1])-integer(bmp.ScanLine[0]);
end
else
ScanlineBytes:=0;
for y:=0 to bmp.Height-1 do
begin
for x:=0 to bmp.Width-1 do
begin
RVALUE:=p[x].rgbtRed;
gVALUE:=p[x].rgbtGreen;
bVALUE:=p[x].rgbtBlue;
RGBtoHSL(RVALUE,gVALUE,bVALUE,hVALUE,sVALUE,lVALUE);
HVALUE:=HVALUE+240;
HVALUE:=Min(240,HVALUE);
HSLtorgb(hVALUE,sVALUE,lVALUE,rVALUE,gVALUE,bVALUE);
p[x].rgbtRed:=RVALUE;
p[x].rgbtGreen:=gVALUE;
p[x].rgbtBlue:=bVALUE;
end;
if (bmp.Width>1)or(bmp.Height>1) then
inc(integer(p),ScanlineBytes);
end;
(FL_img as TImage).Picture.Bitmap.Assign(bmp);
上面这个是处理图像的一个过程!!!
我想不处理像素点为clred 也就红色!!!不处理红色..
其它色都处理..
怎么排除呢?
gVALUE:=p[x].rgbtGreen;
bVALUE:=p[x].rgbtBlue;你都已经把三个颜色的值去除了,只要判断这三个值是否为红色即可,红色绿和蓝颜色为0,红色为255if 是红色 then
continue;
if p[x].rgbtred<>255 or p[x].rgbtGreen<>0 or p[x].rgbtBlue<>0 then
begin
....
end;是这样么?
const
CIRed = $0000FF; { 记不清Red到底是低位还是高位了,如果在高位应该是 $ff0000 }
...
if( (PInteger(@p[x])^ and $00ffffff)=CIRed )then
continue;另外,印象中dib是底部的line在先,而ScanLine正好是反过来的,也就是说,ScanLine[0]其实是最后一行,你的ScanlineBytes应该是个负数,如果别的地方还要用它的话得小心了……