Ocena użytkownikóww: ***** / 1
Nadesłany przez Dariusz Rorat, 09 sierpnia 2010 22: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.
Sepia - Delphi/Unit1.pas:
//Sepia
//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;
RadioGroup1: TRadioGroup;
Label1: TLabel;
SpinEdit1: TSpinEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
color1,color2:longint;
r,g,b,rr,gg :byte;
h,w:integer;
depth: integer;
begin
depth:=SpinEdit1.Value;
for h := 0 to Image1.height-1 do
begin
for w := 0 to Image1.width-1 do
begin
//konwersja na odcienie szarosci
color1:=colortorgb(Image1.Canvas.pixels[w,h]);
r:=getrvalue(color1);
g:=getgvalue(color1);
b:=getbvalue(color1);
color2:=(r+g+b) div 3;
color2:=RGB(color2,color2,color2);
//konwersja do sepii
if RadioGroup1.ItemIndex=1 then //itemindex=1 - sepia
begin
color1:=color2;
r:=getrvalue(color1);
g:=getgvalue(color1);
b:=getbvalue(color1);
rr:=r+(depth*2);
gg:=g+depth;
if rr <= ((depth*2)-1) then
rr:=255;
if gg <= (depth-1) then
gg:=255;
color2:=RGB(rr,gg,b);
end;
Image2.canvas.Pixels[w,h]:=color2;
end;
end;
end;
end.