function TForm1.RadarGifToBmp(strSource, strDest: string): Boolean;
var
       I,j: Integer;
       image1:Timage;
       gif1:Tgifimage;
begin
  try
       image1:=timage.Create(owner);
       gif1:=Tgifimage.Create;
       gif1.LoadFromFile(ExtractFileDir(application.ExeName) + '\radar\' + strSource);
       image1.Picture.Bitmap:=gif1.Bitmap;       for I := 2 to 574 do
       begin
         for j := 2 to 574 do
         begin
           if (image1.Canvas.Pixels[i,j]=rgb(149,108,66)) or (image1.Canvas.Pixels[i,j]=rgb(82,82,139)) or (image1.Canvas.Pixels[i,j]=rgb(212,155,95)) or (image1.Canvas.Pixels[i,j]=rgb(117,117,199)) then image1.Canvas.Pixels[i,j] := rgb(255,255,255);
         end;
       end;       image1.Canvas.CopyMode:=cmSrcCopy;
       image1.Canvas.CopyRect(rect(0,0,572,572),image1.Canvas,rect(2,2,574,574));       image1.Picture.Bitmap.Width:=572;
       image1.Picture.Bitmap.Height:=572;       image1.Picture.SaveToFile(ExtractFileDir(application.ExeName)+'\radartemp\'+strDest);       image1.free;
       gif1.Free;
       result:=True;
  except
    result:=False;
  end;
end;

解决方案 »

  1.   


    function TForm1.RadarGifToBmp(strSource, strDest: string): Boolean;
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array[0..32767] of TRGBTriple;
      function GetSLColor(pRGB: TRGBTriple): TColor;
      begin
        Result := RGB(pRGB.rgbtRed, pRGB.rgbtGreen, pRGB.rgbtBlue);
      end;
    var
      I, j: Integer;
      image1: Timage;
      gif1: Tgifimage;
      p0, p1: PRGBTripleArray;
    begin
      try
        image1 := timage.Create(owner);
        gif1 := Tgifimage.Create;
        gif1.LoadFromFile(ExtractFileDir(application.ExeName) + '\radar\' + strSource);
        image1.Picture.Bitmap := gif1.Bitmap;////////////////
    //最关键的地方如下:
        Image1.Picture.Bitmap.PixelFormat := pf24bit;
        for I := 2 to 574 do
        begin
          p0 := image1.Picture.Bitmap.ScanLine[I];
          for j := 2 to 574 do
          begin
            if (GetSLColor(p0[j]) = rgb(149, 108, 66))
              or (GetSLColor(p0[j]) = rgb(82, 82, 139))
              or (GetSLColor(p0[j]) = rgb(212, 155, 95))
              or (GetSLColor(p0[j]) = rgb(117, 117, 199)) then
            begin
              p0[j].rgbtRed := 255;
              p0[j].rgbtGreen := 255;
              p0[j].rgbtBlue := 255;
            end;
          end;
        end;
    //////////////////////////////
        image1.Canvas.CopyMode := cmSrcCopy;
        image1.Canvas.CopyRect(rect(0, 0, 572, 572), image1.Canvas, rect(2, 2, 574, 574));    image1.Picture.Bitmap.Width := 572;
        image1.Picture.Bitmap.Height := 572;    image1.Picture.SaveToFile(ExtractFileDir(application.ExeName) + '\radartemp\' + strDest);    image1.free;
        gif1.Free;
        result := True;
      except
        result := False;
      end;
    end;