GDI+ freehand çizim
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
GDI+ freehand çizim
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.
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.
Re: GDI+ freehand çizim
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.
Drawline düz cizgiler icin düsünülmüstür.
Es zamanli birden fazla cizim yapabilmek icin de drawpath kullanabilirsin.
kıdemsiz üye
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: GDI+ freehand çizim
ö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
Saygılarla
Re: GDI+ freehand çizim
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;
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
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: GDI+ freehand çizim
ç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.
ayrıca düz çizgi değilde normal kalem çizimi yapmak istiyorum rastgele yani paindeki kalem gibi...
teşekkür ederim.
Re: GDI+ freehand çizim
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.
Bunun kullanim amaci farkli.
senin yapmak istedigin seyi bir önceki örnek ile gerceklestirebilirsin.
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;
senin yapmak istedigin seyi bir önceki örnek ile gerceklestirebilirsin.
kıdemsiz üye
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: GDI+ freehand çizim
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
Re: GDI+ freehand çizim
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
-
- Üye
- Mesajlar: 152
- Kayıt: 16 May 2014 11:23
Re: GDI+ freehand çizim
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