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
|