[Pascal] Rozmycie gaussa

BB-2
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 19 mar 2016, o 09:32
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 3 razy
Pomógł: 6 razy

[Pascal] Rozmycie gaussa

Post autor: BB-2 »

Witam, jestem słaby z programowania, a mam zrobić program, który powoduje, że po naciśnięciu przycisku na obrazie dokonywane jest rozmycie Gaussa. Mam to zrobić na bazie programu, który już napisałem - kod poniżej.
Program ten wczytuje obraz, dokonuje kilku zmian jak np. binaryzacji. Ja chcę aby obraz trzeci był rozmywany efektem gaussa, jednocześnie wykorzystując już jakieś wcześniej napisane komendy. Podpowie ktoś jak to zrobić? Najlepiej aby kod był jak najprostszy. Bardzo proszę o pomoc.

Kod: Zaznacz cały

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, jpeg, ExtCtrls, ComCtrls;

type
  Kolory=Array[1..3]of byte;
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function ColToRGB(Kolor:TColor):Kolory;
Var
  RedGreenBlue:Kolory;
Begin
  ColorToRGB(Kolor);
  RedGreenBlue[1]:=($000000FF and Kolor);
  RedGreenBlue[2]:=($0000FF00 and Kolor) Shr 8;
  RedGreenBlue[3]:=($00FF0000 and Kolor) Shr 16;
  Result:=RedGreenBlue;
End;

procedure TForm1.Button1Click(Sender: TObject);
  Var
    k,i,j:Integer;
    Color:TColor;
    Btmp:TBitmap;
    x,y,z,R,G,B:Byte;
    ReGrBl:Kolory;
begin
  Btmp:=TBitmap.Create;
  Btmp.Assign(Image1.Picture.Graphic);
  Image1.Picture.Bitmap:=Btmp;
  for i:=0 to 500 do
  for j:=0 to 500 do
    Begin
    Color:=Image1.Canvas.Pixels[i,j];
    ReGrBl:=ColToRGB(Color);
    Color:=RGB(ReGrBl[1],0,0);
    Image2.Canvas.Pixels[i,j]:=Color;
    Color:=Image1.Canvas.Pixels[i,j];
    Image3.Canvas.Pixels[i,j]:=Color;
    Color:=Image1.Canvas.Pixels[i,j];
    Color:=RGB(ReGrBl[3],ReGrBl[3],ReGrBl[3]);
    Image4.Canvas.Pixels[i,j]:=Color;
    Color:=Image1.Canvas.Pixels[i,j];
    Color:=Image1.Canvas.Pixels[i,j];
    Image5.Canvas.Pixels[i,j]:=clWhite;
    x:=(ReGrBl[1]+ReGrBl[2]+ReGrBl[3]) div 3;
    If x<100 then Image5.Canvas.Pixels[i,j]:=clBlack;
    End;
  Btmp.Free;
end;

end.
adxasx1
Użytkownik
Użytkownik
Posty: 8
Rejestracja: 20 maja 2016, o 15:39
Płeć: Mężczyzna
Lokalizacja: Nysa
Pomógł: 1 raz

[Pascal] Rozmycie gaussa

Post autor: adxasx1 »

Wow, nie wiedziałem, że w ogóle da się coś takiego zrobić w pascalu o.O
ODPOWIEDZ