algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Solaryzacja - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
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.
Dodaj komentarz