Strona g│≤wna

 

Konwertowanie bitmapy do skali szaro╢ci

Od razu zaznaczam, ┐e ten algorytmy mo┐e byµ wolny na s│abszych maszynach lub du┐ych bitmapach, ale dzia│a :) 

Ca│o╢µ opieraµ siΩ bΩdzie na funkcji konwertuj▒cej kolor do skali szaro╢ci. 

Listing 11.1


 { Pobrano z grupy dyskusyjnej: pl.comp.lang.delphi }
function GetGrayColor (Color: TColor): TColor;
const RConst = 77;
      GConst = 150;
      BConst = 29;
var Index: Integer;
begin
  Index := Byte (Longint (Word (GetRValue (Color)) * RConst +
                 Word (GetGValue (Color)) * GConst +
                 Word( GetBValue(Color)) * BConst) shr 8);
  Result := RGB (Index, Index, Index);
end;

No i w│a╢ciwie to jest g│≤wna funkcja, na kt≤rej opieraµ siΩ bΩdzie nasz program. Funkcja ta pobiera z koloru podanego jako parametr trzy r≤┐ne barwy: czerwony ( GetRValue ), zielony ( GetGValue ), niebieski ( GetBValue ). NastΩpnie pobrane warto╢ci s▒ mno┐one przez sta│e. Mieszaj▒c te kolory ze sob▒ otrzymujemy kolor szary. 

Oto procedura wykorzystuj▒ca powy┐sz▒ funkcjΩ:

Listing 11.2


procedure TForm1.Button1Click(Sender: TObject);
var
  B : TBitmap;
  I, J : Integer;
begin
  B := TBitmap.Create;
  B.LoadFromFile('C:\Moje dokumenty\obrazek.bmp');

  For I := 0 to B.Width do
    for J := 0 to Height do
      B.Canvas.Pixels[i, j] := GetGrayColor(B.Canvas.Pixels[i, j]);

  Canvas.Draw(0, 0, B);
  B.Free;
end;

Ta procedura ka┐dy piksel przetwarza przez funkcjΩ, kt≤ra wcze╢niej napisali╢my. Na tej podstawie otrzymujemy bitmapΩ w skali szaro╢ci, kt≤r▒ p≤╝niej wy╢wietlamy na formie. 

 

 

Adam Boduch