الرئيسية    المنتدى     أرشيف المقالات     المكتبة     رفع الصور    إتصل بنا

عروة نت - سؤال عن الرسم في الدلفي [المنتدى - منتدى Borland Delphi]

يتصفح المنتدى الآن:   1 زائر





سؤال عن الرسم في الدلفي
مشرف
مشترك منذ:
2005/3/20 4:09
الردود: 53
غير متصل الآن
مرحباً للجميع :m: :m: :m:

أريد أن أرسم في الدلفي على IMAGE باستخدام أي تابع يعتمد على الإحداثيات X,Y فماهي التوابع التي تعطيني تلك الإمكانية
ويا حبذا لو توضح بمثال ............................

أرسلت بتاريخ: 2005/4/15 21:31
_________________
خيارات المشاركة وتحويلها إلى تطبيقات أخرى خيارات


سؤال عن الرسم في الدلفي

مشترك منذ:
2005/2/24 0:44
الردود: 156
غير متصل الآن
أهلا سيد Mero :

بالنسبة للرسم ضمن دلفي نحتاج لمعرفة ببعض خصائص عناصر دلفي وفي المقدمة تأتي الخاصةCanvas
العائدة الى الفورم مثلا ,وذلك بإجرائياتها الأكثر شيوعـاً
MoveTo &.LineTo
واللذان يفيدان في التنقل من نقطة إلى أخرى والوصل بين النقط المطلوبة وهي الخاصة المستخدمة في رسم المخططات البيانية حيث نستطيع استخدامها مثلا عند حدث مثلا.FormPaint
ونفس الخاصة نستطيع استخدامها عن التعامل مع برامج الرسم العادية (الرسام مثلا)
وفي حال أردنا التعامل مع نقط تهمنا إحداثياتها فيجب الإنتباه إلى مركز البداية
أي بداية محاور الإحداثيات والتي تختلف عن المحاور الرياضية المعروفة
ولتوضيح الأمر إليك المثال البرمجي الصغير
الذي يفيد في رسم محورين للإحداثيات مركزها هو منتصف الشاشة
طبعا تستطيع الرسم على image (من دون تحميل pictureلها)

حيث يقوم المقطع البرمجي التالي برسم المحورين المتعامدين عند حدث رسم الشكل:



procedure TForm1
. (SenderTObject)
begin

   form1
.Canvas.MoveTo(Form1.Width div 2,0);
   
form1.Canvas.LineTo(Form1.Width div 2,form1.Height);

   
form1.Canvas.MoveTo(0,Form1.Height div 2);
   
form1.Canvas.LineTo(form1.Width,Form1.Height div 2);

end;


ملاحظة أقوم منذ فترة ببرمجة مشروع رسم مخططات لمعادلات رياضية بمجموعة واسعة من الخيارات المتقدمة
وحاليا أقوم بوضع اللمسات الأخيرة للمشروع



----------------
علي عيسى

أرسلت بتاريخ: 2005/4/15 22:27
خيارات المشاركة وتحويلها إلى تطبيقات أخرى خيارات


سؤال عن الرسم في الدلفي

مشترك منذ:
2005/2/27 14:51
الردود: 36
غير متصل الآن
:m:

إرفاق ملف:


rar T1.rar الحجم: 203.42 KB; مرات التنزيل: 336

أرسلت بتاريخ: 2005/4/16 16:12
خيارات المشاركة وتحويلها إلى تطبيقات أخرى خيارات


سؤال عن الرسم في الدلفي
مدير الموقع
مشترك منذ:
2005/2/13 15:07
من Syria
الردود: 1192
غير متصل الآن
كما قال الصديقان العزيزان سيف وعلي..

Canvas من الخصائص المهمة للعناصر التي تقبل الرسم عليها , ويمكن إستخدام عدة مناهج مخصصة للرسم بها .

سأضيف بعض الأمثلة البسيطة للموضوع
مثلا لرسم مربع على الفورم (أو على image ) نحدد إحداثيات رؤوس المربع في المنهج rectangle :

Canvas
.Rectangle(10,10,100,100);

كما تلاحظ تملك canvas العديد من المناهج المشابة لـ Rectangle , وفعليا كل خط سيتم رسمة بإستخدامها يرسم بما يسمى pen . بإمكانك تعديل عرض ولون ونوع هذا الpen حسب الرغبة ,
مثلا لرسم دائرة حمراء بخط متقطع :

with form1
.Canvas do begin
Pen
.Color:=clred;  //لون الرسم
pen.Style:=psDashDotDot//نوع خط الرسم متقطع
Arc(10,10,100,100,100,100,100,100); //رسم قوس دائري
endend;


بالإمكان مثلا إخراج كتابة على canvas , لنفرض أنك تملك مجموعة صور تريد ان يفتحها برنامجك ويكتب في أعلاها إسمك , ثم يعيد حفظها بعد الكتابة عليها , تعليمة كتابة الإسم ستكون كالتالي :

Image1
.Canvas.TextOut(10,10,'www.orwah.net');


تعتبر canvas قوية جدا جدا لإنها تزودنا بالخاصية Pixels[] التي تسمح بالوصول لكل نقطة من الشاشة (ذات إحداثيات (x,y , وقراءة قيمتها اللونية أو تغيير هذه القيمة ,

مثلا لجعل نقطة واحدة بالشاشة (النقطة ذات الإحداثيات 10و10 ) لونها احمر , نكتب السطر التالي :

Canvas
.Pixels[10,10]:=clRed;

لجعل مساحة (50*50) حمراء من الفورم :

procedure TForm1
.Button1Click(SenderTObject);
var 
i,j:integer;
begin
for i:= 0 to 50 do
for 
j:= 0 to 50 do
Canvas.Pixels[i,j]:=clRed;
end;


دعنا الآن نخرج من اللون الأحمر , ولكنتب شيء فيه بعض المتعة , جرب هذه الشفرة البسيطة واستمتع بالخرج الهندسي الجميل :

procedure TForm1
.Button1Click(SenderTObject);
var 
x,y:integer;
begin
for x:= 0 to Width do
for 
y:= 0 to Height do
Canvas.Pixels[x,y]:=x*and $FF;
end;


بنفس التعليمة Pixels[x,y] تستطيع قراءة لون أي نقطة من سطح الcanvas (سحاحة اللون في برامج الرسم )

وكذلك أيضا كما ذكر علي يوجد المنهجان الجميلان lineto و moveto , moveto تجعلنا نقف في نقطة معينه , lineto تجعلنا نصل خط بين نقطة وقوفنا ونقطة أخرى :
لرسم مثلث بهذه الطريقة مثلا :

with Canvas 
do begin
MoveTo
(10,10);
LineTo(10,100);

MoveTo(10,100);
LineTo(100,100);

MoveTo(100,100);
LineTo(10,10);
end;


المهم دعنا نتكلم الآن عن السيئة الأساسية لهذه الخاصية ,, ألا وهي البطء , لابل البطء الشديد
كما لاحظت أنه حتى تقوم بمسح نقاط صورة ما وقلب اللون الأحمر فيها إلة لون أزرق مثلا أو تحويلها إلى رمادي , أو إجراء أي معالجة علىر صورة ما , سيتطلب ذلك مسح الصورة بيكسل وراء بيكسل , وهذا يأخذ وقت طويل يجعلها غير مناسبة للأمور السريعة أو التي تحوي حركة مثلا ,

توجد توابع رسم اخرى في دلفي , من اهمها scanline الفائقة السرعة , والتي قد تكون أسرع ب 800 أو 1000 مرة من pixels في بعض الحالات (لإنها تتعامل مع سطر بدلا من نقطة,كما أنها تغيير موقع الذاكرة من مكانة بطريقة المؤشرات مما يزيد السرعة بشكل كبير )


حسنا لن أسترسل أكثر بالموضوع أظن انه غطي بشكل لا بأس به ,

وهذا مثال برنامج تأثيرات رائع للتعديل على الصور , مع الشفرة

إرفاق ملف:


zip GraphicsEffectsSource.zip الحجم: 69.18 KB; مرات التنزيل: 438

أرسلت بتاريخ: 2005/4/16 18:42

حررت بواسطة orwah في 2005/4/16 19:54:17
خيارات المشاركة وتحويلها إلى تطبيقات أخرى خيارات






يمكنك قراءة موضوع.
لا يمكنك إضافة موضوع جديد.
لا يمكنك الرد على المشاركات.
لا يمكنك تحرير مشاركاتك.
لا يمكنك حذف مشاركاتك.
لا يمكنك إضافة إستفتاء جديد.
يمكنك التصويت في الإستفتاءات.
لا يمكنك إرفاق ملفات في مشاركاتك.
لا يمكنك المشاركة بدون موافقة المشرف.

[بحث متقدم]




عروة عيسى
2005-2007

Powered by XOOPS