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 也就红色!!!不处理红色..
其它色都处理..
怎么排除呢?

解决方案 »

  1.   

    RVALUE:=p[x].rgbtRed;
    gVALUE:=p[x].rgbtGreen;
    bVALUE:=p[x].rgbtBlue;你都已经把三个颜色的值去除了,只要判断这三个值是否为红色即可,红色绿和蓝颜色为0,红色为255if 是红色 then
      continue;
      

  2.   

    哦  也就是  
    if p[x].rgbtred<>255 or p[x].rgbtGreen<>0 or p[x].rgbtBlue<>0 then
    begin
    ....
    end;是这样么?
      

  3.   

    if p[x].rgbtred =255 and p[x].rgbtGreen =0 and p[x].rgbtBlue =0 then 或者判断bmp.Canvas.Pixels[x,y] := clRed;//这个可能要结合你的实际情况决定是否使用
      

  4.   


    const
      CIRed = $0000FF; { 记不清Red到底是低位还是高位了,如果在高位应该是 $ff0000 }
    ...
      if( (PInteger(@p[x])^ and $00ffffff)=CIRed )then
        continue;另外,印象中dib是底部的line在先,而ScanLine正好是反过来的,也就是说,ScanLine[0]其实是最后一行,你的ScanlineBytes应该是个负数,如果别的地方还要用它的话得小心了……