Как преобразовать цветное изображение в чёрно-белое?

Delphi FAQ >> Графика

Данная функция на Delphi преобразовывает цветное изображение в черно-белое(оттенки серого):

function CreateGrayBmp (Source: TBitmap): TBitmap;
var
  Table: array[Byte] of TRGBQuad;
  I: Integer;
begin
  Result := TBitmap.Create;
  with Result do
  begin
    PixelFormat := pf8Bit;
    Width := Source.Width;
    Height := Source.Height;
    for I := Low(Table) to High(Table) do
      with Table[I] do
      begin
        rgbRed := I;
        rgbGreen := I;
        rgbBlue := I;
        rgbReserved := 0;
      end;
    if (SetDIBColorTable(Canvas.Handle, Low(Table), High(Table), Table) = 0) then
      RaiseLastWin32Error;
    Canvas.Draw(0, 0, Source);
  end;
end;