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?

Technika mikrowzorów (metoda komórkowa) - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 12 września 2009 01: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.

Patterning - Delphi/Unit1.pas:
//Tomasz Lubiński (C)2009
// http://www.algorytm.org
//Patterning - technika mikrowzorcow

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls, Math, SHELLAPI;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    Image2: TImage;
    Label2: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    UpDown1: TUpDown;
    Label6: TLabel;
    dispersed: TRadioButton;
    cluster: TRadioButton;
    procedure Button1Click(Sender: TObject);
    procedure Label6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


  PPixelRec = ^TPixelRec;
  TPixelRec = packed record
    B: Byte;
    G: Byte;
    R: Byte;
    Reserved: Byte;
  end;

var
  Form1: TForm1;

  pattern : array [0..1] of array [0..2] of array [0..2] of Byte =
  (
     (
        (8, 3, 4),
        (6, 1, 2),
        (7, 5, 9)
     ),
     (
        (1, 7, 4),
        (5, 8, 3),
        (6, 2, 9)
     )
  );

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,l,choosenPattern: Integer;
    p: Real;
    pixelOrg, pixelNew: PPixelRec;
    white, black: TPixelRec;
begin

//przygotuj wartosci bialy i czarny
white.B := 255;
white.G := 255;
white.R := 255;
black.B := 0;
black.G := 0;
black.R := 0;

//przygotuj obrazy wynikowe
Image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.Rectangle(0, 0, Image2.Width, Image2.Height);
Image2.Picture.Bitmap.PixelFormat := pf32Bit;

//przygotuj format obrazu zrodlowego
Image1.Picture.Bitmap.PixelFormat := pf32Bit;

//pobierz prog
p := StrToInt(Form1.Edit1.Text) / 9;

//pobierz wybrany wzorzec
if (cluster.Checked = true) then
        choosenPattern := 0
else
        choosenPattern := 1;

//zwykle progowe
for j:=0 to Image1.Height-1 do
begin
        for k:=0 to 2 do
        begin
                pixelOrg := Image1.Picture.Bitmap.ScanLine[j];
                pixelNew := Image2.Picture.Bitmap.ScanLine[j*3 + k];
                for i:=0 to Image1.Width-1 do
                begin
                        for l:=0 to 2 do
                        begin
                                if (p * pattern[choosenPattern, k, l] > pixelOrg.r) then
                                        pixelNew^ := black
                                else
                                        pixelNew^ := white;
                                Inc(pixelNew);
                        end;
                        Inc(pixelOrg);
                end;
        end;
end;
end;

// http://www.algorytm.org link
procedure TForm1.Label6Click(Sender: TObject);
begin
  with (Sender as Tlabel) do
 ShellExecute(Application.Handle,
             PChar('open'),
             PChar(Hint), 
             PChar(0),
             nil,
             SW_NORMAL);

end;

end.
Dodaj komentarz