Ocena użytkownikóww: ***** / 1
Nadesłany przez Dariusz Rorat, 02 sierpnia 2010 10:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
Solaryzacja - Delphi/Unit1.pas:
//Solaryzacja
//Dariusz Rorat
//www.algorytm.org
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Label1: TLabel;
SpinEdit1: TSpinEdit;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
LUT: array[0..255] of double;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Image1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i, j, r, g, b: Integer;
col: TColor;
Luminance: integer;
begin
Luminance:=SpinEdit1.Value;
for i:=0 to (Luminance-1) do LUT[i]:=i; //solaryzacja
for i:=Luminance to 255 do LUT[i]:=255-i;
for j := 0 to Image1.Height-1 do
for i := 0 to Image1.Width-1 do
begin
col := Image1.Canvas.Pixels[i,j];
r := GetRValue(col);
g := GetGValue(col);
b := GetBValue(col);
//zmien wartosc wedlug tablicy LUT
col := Round(LUT[r]) +
(Round(LUT[g]) shl 8) +
(Round(LUT[b]) shl 16);
Image2.Canvas.Pixels[i,j] := col;
end;
end;
end.