الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

رسم بالحاسوب

مغلق
بدأه ibr_exn في 27 أغسطس 2005 · 7 رد · 1,485 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحياتي للجميع

عندي موضوع رسم بالحاسوب حاختبر فيه وما عنديش اي مراجع له

من الاشياء المطلوبة :

رسم الاشكال الهندسية المختلفة :دائرة - مربع - نجمة -...الخ

رسم المعادلات

التحريك -التدوير-التكبير - التصغير - التحجيم

الالوان :عكس الالوان - تغيير اللون

عمل بعض التأثيرات : اضاءة -النار- قلب الصورة كالمرآة

التعرف على الصور-التعرف على اللون-على حواف الشكل

ارجو المساعدة : خوارزميات - اكواد - كتب الكترونية -اي شيء ممكن يفيد

تحياتي للجميع

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#2

form1.canvas.lineto

و

form1.canvas.moveto

يحققان العجائب .... مابالك بالأمور المعقدة .. راجع مكتبة الأكواد فيها مثال رسم رياضيات

أعتمد على الصنف canvas .

ستجد فيه الكثير من الأمور المهمة والسهلة

drawline أسرع بكثير ,, ولكن أصعب بالتعامل

روابط :

/index.ph...62936&hl=canvas

/index.ph...59291&hl=canvas

/index.ph...42136&hl=canvas

#3

الف شكر اخ عروة

دائماً متعاون وردود متميزه

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#4

وجدت ملف يحوي جزء كبير مما اريده ولكن لم افهمه

GraphicsEffectsSource.zip

موجود في احد مشاركات الاخ عروة المتميزة

مشاركة ضمن مكتبة الاكواد

ولكن اتمنى ان تشرح ضمن هذا الموضوع

تحياتي للجميع

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#5

مشاركة وجدتها في المنتدى واحببت اضافتها الى هذا الموضوع :

/index.php?showtopic=74153

وهذت برنامج لرسم نجمة مع امكانية تغيير عدد الرؤوس لها :

فيه مشكلة بسيطة اذا عملت n يساوي 100

procedure star(xc,yc,n:integer;r1,r2:Double);
var 
    x,y : array[1..365]of Integer;
    th,st,pii:Double;
    counter,i,k: Integer;
begin
st :=360 / n;  pi180:= 22 / 7 / 180; counter := 1; th:=0;
FOR k:=1 TO n*2 do
   begin
   x[counter]:=trunc(xc + r1 * Cos(th * pi180));
   y[counter]:=trunc(yc + r1 * Sin(th * pi180));
   x[counter + 1]:=trunc(xc + r2 * Cos((th + st / 2) * pi180));
   y[counter + 1]:=trunc(yc + r2 * Sin((th + st / 2) * pi180));
   counter:= counter + 2;
   th:=th+st;
   end;
form1.Canvas.Pen.Color :=clred;
form1.Canvas.MoveTo(x[1],y[1]);
form1.Canvas.LineTo(x[2],y[2]);
For counter:= 3 To n * 2 do
    begin
    form1.Canvas.MoveTo(x[counter-1],y[counter-1]);
    form1.Canvas.LineTo(x[counter],y[counter]);
    end;
form1.Canvas.MoveTo(x[counter-1],y[counter-1]);
form1.Canvas.LineTo(x[1],y[1]);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Refresh;
star(STRTOINT(XC.Text),
        STRTOINT(YC.Text),
        STRTOINT( N.Text),
        STRTOINT(R1.Text),
        STRTOINT(R2.Text));
end;

مع خالص تحياتي

ابراهيم

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#6

اسف يوجد خطأ في الكود السابق

غير المتغير pi180 الى pii او العكس

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#7

لمعرفة لون نقطة معينة عرف متغير من نوع Tc

c:=canvas.pixels[x,y];

وهذا الكود لرسم شكل بيضاوي ويمكن رسم دائرة منه بجعل r1=r2 :

procedure TForm1.Button1Click(Sender: TObject);
var
   x,y,x0,y0,k,r1,r2:integer;
   pi:double;
begin
canvas.Pen.color:=clred;
canvas.Pen.width:=5;
x0:=300; y0:=150;
r1:=200;
r2:=100;
pi:=22/7/180;
for k:=0to 360 do
    begin
    x:=trunc(x0+r1*cos(pi*k));
    y:=trunc(y0+r2*sin(pi*k));
    canvas.MoveTo(x,y);
    canvas.LineTo(x,y);
    end;
end;

هذا الكود لقلب صورة

procedure TForm1.Button1Click(Sender: TObject);
var
    x,y,nx,ny,sx,sy:integer;
    c:tcolor;
begin
sx:= strtoint(edit1.Text);
sy:= strtoint(edit2.Text);
For x:= 1 To image1.Width do
   For y:= 1 To image1.Height do
       begin
       c:= image1.canvas.pixels[x,y];
       nx:= y;
       ny:= x;
       image2.Canvas.Pixels[nx,ny] :=c;
       end;
end;

هذا الكود لتكبير صورة ( اذا حد يعرف الرجاء تحسين الكود ووضع كود تصغير صورة )

procedure TForm1.Button1Click(Sender: TObject);
var
    x,y,nx,ny,sx,sy:integer;
    c:tcolor;
begin
sx:= strtoint(edit1.Text);
sy:= strtoint(edit2.Text);
For x:= 1 To image1.Width do
   For y:= 1 To image1.Height do
       begin
       c:= image1.canvas.pixels[x,y];
       nx:= x * sx;
       ny:= y * sy  ;
       image2.Canvas.Pixels[nx,ny] :=c;
       end;
end;

وهذا الكود لعمل انعكاس افقي (يمكن تعديله ببساطة ليعمل انعكاس عمودي)

procedure TForm1.Button1click(Sender: TObject);
var
    x,y,nx,ny,sx,sy:integer;
    c:tcolor;
begin
sx:= strtoint(edit1.Text);
sy:= strtoint(edit2.Text);
For x:= 1 To image1.Width do
   For y:= 1 To image1.Height do
       begin
       c:= image1.canvas.pixels[x,y];
       nx:= -x * sx +180;
       ny:= y * sy  ;
       image2.Canvas.Pixels[nx,ny] :=c;
       end;
end;

مع خالص تحياتي

ابراهيم

olor وليكن c واستخدم هذا الكود :

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

#8

يا شباب وين المشاركات ؟؟؟

الحمد لله الذي هدانا لهذا وماكنا لنهتدي لولا ان هدانا الله

هذا الموضوع مغلق.

مواضيع مشابهة