GDI+ freehand çizim

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

GDI+ freehand çizim

Mesaj gönderen anonymousdelphicoder »

merhabalar,

gdi+ ile ilgili bir sıkıntım var çözebilecek arkadaşlarım hocalarım var ise şimdiden teşekkür ederirm.

yalnızca GDI+ kütüphanesini kullanarak freehand kalem çizim yapmak istiyorum paint deki kalem gibi başka kütüphane veya delphinin canvas sınıfını kullanmadan.

GDI+ de DrawLine komutu var 4 argüman alır x1 y1 x2 y2

canvas sınıfında ise moveto ve line methodları ayrı olduğu için sıkıntısız freehand pen çizim yapabiliyorum ama GDI+ de yapamadım.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: GDI+ freehand çizim

Mesaj gönderen ikra »

fare ile cizim yapacaksan, yani düzgün cizgiler olmayacaksa drawpath özelligini kullanmalisin.
Drawline düz cizgiler icin düsünülmüstür.
Es zamanli birden fazla cizim yapabilmek icin de drawpath kullanabilirsin.
kıdemsiz üye
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: GDI+ freehand çizim

Mesaj gönderen anonymousdelphicoder »

örnek vermeniz mümkün müdürr. Drawpath tam olarak nedir. yani nasıl bir path eklemem gerekli birazdaha aydınlatabilir misiniz ?

Saygılarla
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: GDI+ freehand çizim

Mesaj gönderen ikra »

Kod: Tümünü seç

var 
baslangic, bitis: tpoint;
Mousedown: boolean;

Procedure onmousedown(x,y vs.)
Begin
  Mousedown := true;
  Baslangic.x := x;
  Baslangic.y := y;
End;

Procedure onmouseup(x,y vs.)
Begin
  Mousedown := false;
End;

Procedure onmousemove(x,y vs.)
Begin
  Bitis.x := x;
  Bitis.y := y;
  Invalidate;
End;

Procedure onpaint;
Begin
  Inherited;

  If mousedown then
  Begin
    Gdi islemleri drawline vs.
    Baslangic.x := bitis.x;
    Baslangic.y := bitis.y;
  End;
End;
Yukaridaki drawline örnegi.
Drawpath ise birden fazla koordinati es zamanli cizdirmek icin kullanilir. Yukaridaki islem ihtiyacini karsilayacaktir.
Antialiasing kullanmayi unutma, aksi taktirde gdi kullanmis olmanin hic bir anlami yok.
Sürekli cizim yaparken gdi kullanmak oldukca kasma yapar cünkü gdi performansa degil, kaliteli cizime yönelik tasarlanmistir.

Umarim isini götür.
Kolay gelsin.
kıdemsiz üye
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: GDI+ freehand çizim

Mesaj gönderen anonymousdelphicoder »

çok sagolun biraz anladım fakat gdi+ de drawpath i kullanmadım drawpathe nasıl bir argüman vermem gerekli gdi+ kodunuda istesem çok sey istems olurmuyum

ayrıca düz çizgi değilde normal kalem çizimi yapmak istiyorum rastgele yani paindeki kalem gibi...
teşekkür ederim.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: GDI+ freehand çizim

Mesaj gönderen ikra »

ben ilk mesajimda sana eksik bilgi verisim. hakkini helal et.

aslinda kalem ile cizdigin karisik cizgiler de kisa kisa düz cizgiler.
sen her fareyi oynattiginda bir yada ikiser pixel uzunlugunda kisa cizgler ciziyorsun. bunlar bir yukari bir asagi indiginde sanki kalem ile imzalamis gibi bir görünüm veriyor. isin mantigi bu.
yukarida vermis oldugum kodlari denersen, ne dedigimi daha iyi anlayacaksin.

drawpath'a gelince.

Kod: Tümünü seç

var
  Path: TGPGraphicsPath;
begin
  with TGPGraphics.Create(Bitmap.Canvas.Handle) do
    try
      Path := TGPGraphicsPath.Create;
      with Path do
        try
          AddLine(TGPPoint(10,10), TGPPoint(20,20));
          AddArc(); // diger bir add metodu
          AddBezier(); // diger bir add metodu

          DrawPath(Pen, Path); // GPGraphics'e Path'i cizdiriyoruz
        finally
          Free; // Path'i Free ediyoruz
        end;
    finally
      Free; // GPGraphics'i Free ediyoruz
    end;
end;
Bunun kullanim amaci farkli.
senin yapmak istedigin seyi bir önceki örnek ile gerceklestirebilirsin.
kıdemsiz üye
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: GDI+ freehand çizim

Mesaj gönderen anonymousdelphicoder »

Helal olsun, teşekkr ederm anladım sanırımn ilk örnegi drawline kullanarak kalem çizebilirim. birde merak ettiğim husus var path kullanmanın amacı ve mantığı nedir normal graphicsdeki drawline dan farkı nedir tekrarlanan çizimlerde tekrar çizdirmeyi önlemek mi
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: GDI+ freehand çizim

Mesaj gönderen ikra »

Drawpathin özelligi ayni zamanda birden fazla sekli cizebilmeni ve cizgilerin baslangic ve bitis noktalarini closepath dediginde kapamasi ve bu birlesimden olusan seklin icini fillpath komutu ile doldurabilmeni saglar.
kıdemsiz üye
anonymousdelphicoder
Üye
Mesajlar: 152
Kayıt: 16 May 2014 11:23

Re: GDI+ freehand çizim

Mesaj gönderen anonymousdelphicoder »

Cok tesekkur ederm baslangc ve bitis in kapanmasi derken yani close path demezsek ne olur bir nevi delphidekl align ozellgi gibi size a gore degerlermi degisir
Cevapla