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

مشروع جماعي -برنامج الرسام-

بدأه علاء الصالحي في 1 سبتمبر 2008 · 44 رد · 8,202 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26
اقتباس
مادام الموضوع فيه الشمري باشا

شكرا على الاطراء .. لكن لا تعتمد علي كثيرا :( .

اقتباس
أريد أن أؤكد على أن الجافا لا تعيد الرسم بنفسها

وإنما يجب علينا أن نحفظ الأشكال في تركيب بيانات ما

حتى نتمكن من إعاد الرسم مرة ثانية

نطبق ما يسمى بمفهوم ال Double Buffer ... .. الله يذكر الاخ أحمد غريب بالخير ,, اذكر أنه أول من أخبرني بتلك الطريقة ..

1- السطح الخلفي : Back Buffer .. نرسم عليه وهو مسرح العمليات ..

2- السطح الأمامي : Front Buffer .. وهو السطح الخلفي بعد احضاره الى الامام .

في الويندوز .. نستخدم ما يسمّى بالDC .. لكن في الجافا لا أعلم .. سأبحث في هذا الموضوع .

- سأقوم بعمل تجارب مبدئية .. وطرحها هنا باذن الله .. الى ان تتضح لدي الصورة .

تم تعديل هذه المشاركة بواسطة الشمري في 15 سبتمبر 2008 في 21:55

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#27

السلام عليكم من جديد

بالنسبة لفصل النواة عن الواجهة فهو ممكن ولكن لا يمكن فصل النواه عن الأحداث Events

يجب تجهيز كلاسات للأحداث Mouse Down , Mouse Move , Mouse Up

طبعا هذه الأحداث تحصل على لوحة الرسم , بعد عمل ذلك سيكون من السهل الإنتقال إلى مرحلة تنفيذ عملية الرسم (حسب الأداة المختارة من المستخدم)

#28

السلام عليكم

بداية لدي طلب صغير و هو استخدامكم لترجمة الحرفيه

للمصطلحات الانجليزية صراحة انا استصعب قراءة الردود حيث توجد

كلمات لا أفهم ما مقابلها في لغة الجافا مثلا نواه, حاوبة, فئة

لم افهم سوى حزمة يعني باكج :wacko:

اقتباس
1- فصل GUI عن النواة .. يعني لا يجب أن يكون البرنامج " مشربك " مع الGUI .. فلو جاء شخص وقال انه لا يجب ال swing مثلا .. فانه يمكنه اعادة كتابة البرنامج .. باعادة كتابة كلاسين أو ثلاثة على أقصى تقدير ..

امممم تريد ان تعمل مثل مبدأ MVC

فعلا طريقة جيدة لاكثر من سبب اولا الفصل وهو شيء جيد

بالاضافة الى اننا نقلل من حجم الكود بالكلاس الواحد لان كبر الكود امر يضايقني عند البرمجة

اقتباس
1- السطح الخلفي : Back Buffer .. نرسم عليه وهو مسرح العمليات ..

2- السطح الأمامي : Front Buffer .. وهو السطح الخلفي بعد احضاره الى الامام .

صراحة لم أفهم ماذا تقصد اذا ممكن أخي الفاضل توضح أكتر

حياكم الله جميعا

#29

بالنسبة للترجمة فهي ليست حرفية :D .

class : فئة .

core : نواة .

container : حاوية .

النافذة : Window أو Frame ..

اعادة الرسم : repaint .

http://mindprod.com/jgloss/repaint.html

---------------

المشكلة الأساسية و التي يدور حولها البرنامج هي بالسطح الذي نرسم عليه .. السطح هو ال Buffer .. يعني جزء من الشاشة نرسم عليه .

لو رسمت أي شيء في الجافا .. فان الرسم سيزول بمجرد اعادة رسم النافذة .. نقصد باعادة الرسم .. ان تظهر نافذة فوق نافذة البرنامج او عند تصغير البرنامج .. لذلك لا نرسم مباشرة على النافذة ..انما نخزن بيانات الرسم في كلاس نسميه مثلا Buffer .. وهو بمثل أبعاد ال Frame .. ويحوي على مصفوفة من البايتات التي تمثل اللون RGBA مثلا .. ثم في الحدث( event ) الخاص باعادة الرسم .. ننسخ محتوى ال Back Buffer الى ال Frame الذي نرسم عليه .

لا أريد أن أتحدث كثيرا الى حين أن أجرب مع الجافا .. لم اجرب ذلك مع الجافا ولكن مع Win32 API .. وأعتقد ان الجافا تقدم ماهو أسهل باذن الله .. لذلك كل ما قلته مجرد كلام نظري ..

تم تعديل هذه المشاركة بواسطة الشمري في 15 سبتمبر 2008 في 23:59

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#30

بصراحة أنا قمت بذلك مسبقاً أخي الشمري

كنت أحفظ الأشكال في حلقات متسلسلة أحادية الاتجاه

ثم أعيد رسمهم مرة أخرى

لكني أريد أن نعمل على جودة أعلى

لو حاولنا تطويره إلى مستوى أفضل من الرسم

لو أردنا أن نقدم شكل على شكل أو نضيف شكل في مكان معين

امممممممممممممممم

شكلي هصعبها عليكم

على العموم يكمنكم مراجعة البرنامج الذي وضعته هنا

للتعرف بشكل أكبر على الطريقة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#31

هل هناك من يعمل على واجهة ؟؟؟

هل هناك من هو مهتم أصلاً بموضوع المشروع

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#32
اقتباس
هل هناك من يعمل على واجهة ؟؟؟

هل هناك من هو مهتم أصلاً بموضوع المشروع

مهتم طبعا .. ولكن مشكلتي هي بالبحث عن أفضل الطرق للتنفيذ ..

قمت بعمل برنامج ( لاستعراض الصور .. واضافة تأثيرات عليها ) .. للتجربة فقط ..

وسأضيفه هنا ان شاء الله .. لكن واجهت مشكلة أخي .. وهي ماهو الكلاس الرئيسي في الجافا المسؤول عن تحميل الصور .. حتى ارث منه .. وأبني عليه .. وجدت عدة كلاسات ..

الفئات ( الكلاسات ) التي استخدمتها هي ImageIO و ImageReaders .. ولكنها لا تقرأ الا ملفات ال bmp ..على عكس ما توقعت ..

وجدت methods في ال JApplet .. على مااذكر أنها getImage .. وهي تحمل عدة انواع من الصور .. ولكن لا اعتقد ان استخدامها يفيد المشروع.

عموما .. سأضيف التجربة الأولى ( ان شاء الله ) .. وسأحاول أن اعمل interface لتحميل الصور اذا لم اجد كلاس مشابه في الجافا ..

ثم سأضيف " شخابيط " تمثل واجهة البرنامج المقترحة .. وأمور أخرى ..

لكن يجب أن يساعدني أحد .. فلا أستطيع أن اعمل شيء لوحدي .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#33

كنت رسمت يوم امس تخطيط للواجهة بإستخدام الرسام (الشخابيط) ولكن للأسف ليس لدي IDE لأقوم بتصميميها من خلاله

الصوره

post-133895-1222197195_thumb.jpg

لعل أحد الأخوان يقوم بتصميمها و يرفق الكود

#34

كنت اقترحت أن تكون واجهة البرنامج مثل الرسام الموجود مع الويندوز .. نسخة طبق الاصل يعني ..

مع اضافة تعديلات بسيطة .. ( مثل ازالة لوح الالوان .. لاننا سنستخدم ال JColorChooser ( اظن اسمه كذا ) ..

والهدف من ذلك .. ازالة أي غموض .. وحتى تكون الامور واضحة

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#35

الفئة المسؤولة عن الصور في جافا هي ImageIO

	Image image = null;
	try {
		// Read from a file
		File sourceimage = new File("source.gif");
		image = ImageIO.read(sourceimage);

		// Read from an input stream
		InputStream is = new BufferedInputStream(
			new FileInputStream("source.gif"));
		image = ImageIO.read(is);

		// Read from a URL
		URL url = new URL("http://java-tips.org/source.gif");
		image = ImageIO.read(url);
	} catch (IOException e) {
	}

هذه الطرق التي يمكن من خلالها أن تحمل صورة إلى الذاكرة

هذا المثال يوضح العكس

هل جربتها ولم تستطع فتح غير bmp??

جيد خلدون لكن فعلاً نحن اتفقنا على ان تكون واجهة شبيهة بالرسام

أنا أردت من يقوم بتصميمها على IDE

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#36

لسلام عليكم .

- اعتذر عن الـتأخير , حيث أني لا أملك اتصال بالنت من خلال البيت .. بسبب شركة الامتصاصات السعودية .. اتصل من مقهى .

- كما أتمنى من الاخ علاء كونه صاحب الموضوع .. من تعديل عنوان الموضوع وازالة كلمة المبتدئين .. حتى يدخل الخبراء ويشاركوننا !!!

- التجربة الأولى ... Painter Plus

post-42837-1222646543_thumb.jpg

- الهدف من التجربة هو الاطلاع على أهم ما نحتاج للبرنامج .. وماهي العوائق التي ستواجهنا ..

- البرنامج في المرفقات .. اسميت البرنامج Painter Plus .. كاسم مؤقت .. وكل الكلاسات تبدأ بالبادئة PP اختصارا لاسم البرنامج وليتوضح لكم الأمر .

- تصميم الكود وهندسة البرنامج سيئة .. بسبب خبرتي القليلة .. بال swing و البرمجة المرئية عموما بالجافا .. كل ما أعرفه هو ما درسته فقط .. لذلك نحتاج لشخص ( فاهم :) ) يساعدنا على الأقل في الأمور الخاصة بال swing ... حتى يمكن لنا( نحن الاعضاء) الاستمرار ..

- فكرة أولية .. وتحليل للبرنامج :

البرنامج يتكون من خمسة أقسام رئيسية :

1- Tool Box : وسيحوي على الادوات الخاصة بالرسم .

2- Tool Bar : يحوي على ايقونات معروفة .. مثل التراجع .. والحفظ ..

3- Status Bar : شريط الحالة .. سيحوي على معلومات لوصف ما تقع عليه فأرتنا .. mouse .

4 - القائمة الرئيسية : معروفة ..

5- Canvas : وهو السطح ( جزء من النافذة ) الذي سنرسم عليه .. اسميته بهذا الاسم .. لانه متعارف عليه من بين أغلب برامج الرسم مثل photoshop .

وهو أحد أكثر الاجزاء أهمية .. ومن خلاله نحول برنامجنا من برنامج متواضع الى فوتوشوب :-) .

- نلاحظ أن ال Canvas هو عبارة عن JPanel

- لانرسم مباشرة على Canvas .. انما نرسم على جزء من الذاكرة BufferedImage .. .

- بالتالي لو رسمنا على BufferedImage نكون قد استطعنا ان نحول هذا BufferedImage الى الطابعة أو النافذة او الى ملف صورة ..

- نكون قد تحررنا من ال JPanel أو ال Canvas .. واذا أردنا تطبيق تأثير معيّن .. نجد أمامنا صورة في الذاكرة بالامكان تعديلها كيفما نريد.

سيكون الأمر شبيها بالتالي :

post-42837-1222646618_thumb.jpg

- التجربة في المرفقات .. وتستطيع فتح صور .. وتخزين صور ( شكرا لك أخي علاء على المساعدة) ..

- وتستطيع اضافة بعض المؤثرات ..

- حقيقة .. ما لاحظته .. أننا نحتاج لمناقشة وتحليل عميق للبرنامج .. كيف سيتم ( تصميم كود البرنامج ) وكيف سيتم ادارة الصورة في الذاكرة .. وكيف سنقوم بعملية التراجع ) ... الخ..

- كما أننا نحتاج الى التفكير بالمستقبل :-) .. ماذا عن Layers .. كيف نبني برمنامجنا الان بحيث يمكن تطويره مستقبلا لدعم الطبقات ..

أتمنى المزيد من التحليل .. من خلال النقاط التالية ان احببتم :

1- كم BufferedImage نحتاج على الاقل لنرسم عليها .. وكيف سنديرها .. قد نحتاج الى BufferedImage لنقوم بالرسم الوهمي ( الارشادي) ... لانه رسم مؤقت .. هل فهمتوا قصدي .

2- كيف سنقوم بعمل undo و redo .. فكرت بعملية Backup كامل للصورة أو جزء من الصورة .. ولكن هذا سيستنزف الذاكرة ..

3- تصميم كود البرنامج كيف سيكون .. أتوقع انه يجب ان نستعين كثيرا بالواجهات interfaces .. حتى نفصل الواجهة عن ال implementation .. حتى نستطيع أن نستقل ببرنامجنا عن الجافا ومكتباتها ..

أتمنى من الخبراء المشاركة .. واظهار ما لديهم .. لا نريد الموضوع تعليمي .. بل نريد أن تضعوا ثقلكم بهذا البرنامج :D .

وكل عام وأنتم بخير ,, وتقبل الله منا ومنكم الصيام والقيام ..

في المرفقات البرنامج .. قمت بنسخ كامل المجلد بما يحويه .. لعل ذلك ان يسهل عليكم استيراده من NetBeans ( قلت لكم خبرتي قليلة) ..

Painter_Plus.zip

تم تعديل هذه المشاركة بواسطة الشمري في 29 سبتمبر 2008 في 03:09

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#37

السلام عليكم

كيف حالك أخي الشمري

آسف إن كنت تأخرت عليك في الرد

اطلعت على الشيفرة الخاصة بك

فهمت أنك تريد فصل الواجهات عن باقي النظام

في الأغلب عند محاولة الفصل في النظام

يستخدم mvc لذلك

حاولت أن أستنتج أين المتحكم controller في نظامك ففشلت

بالنسبة للأخ model فهو BufferImage

بالنسبة للأخ view فهو باقي النظام من شريط جانبي وسفلي وشريك أدوات وعارض الصور

يجب أن تتم عملية الربط بين الواجهات والأدوات المختلفة باستخدام controller

بالمناسبة لاحظت أنك تستخدم الدالة update

أذكر أني كنت أستخدم paint أو paintComponent

هل تعرف أي فرق بينهم؟؟؟

بالنسبة لموضوع الفلاتر أرى أنها مرحلة سابقة لأوانها

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#38
اقتباس
في الأغلب عند محاولة الفصل في النظام

يستخدم mvc لذلك

حاولت أن أستنتج أين المتحكم controller في نظامك ففشلت

بالنسبة للأخ model فهو BufferImage

بالنسبة للأخ view فهو باقي النظام من شريط جانبي وسفلي وشريك أدوات وعارض الصور

للاسف .. لا أعرف الكثير عن هذه المصطلحات .. فقد سبق أن قرأت عنها .. لكن بدون تطبيق أو حتى فهم جيد ..

لذلك كما قلت .. من الأفضل أن يوجد شخص متخصص بتصميم الكود .. عن طريق ال UML مثلا .. و سأقوم بالتطبيق ان شاء الله ,

اقتباس
بالمناسبة لاحظت أنك تستخدم الدالة update

أذكر أني كنت أستخدم paint أو paintComponent

هل تعرف أي فرق بينهم؟؟؟

حقيقة .. الدالة update .. أنا من أنشأتها ( قد يكون لها اسم مشابه في awt أو swing .. ) ..

بالنسبة لتحديث الرسم استخدم repaint .. والرسم دائما يكون داخل paintComponent ..

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

----

كشرح سريع للكود الذي أضفته .. نبدأ من ال Main ننتقل الى PPFrame لانشاء الادوات .. ومن ثم ننتقل الى PPCanvas .. لرسم الصور .. وأي أحداث تقع .. فانها موجودة داخل الكلاس PPFileMenuActions و PPImageMenuActions الخ .. ومن ثم بعد تلك الevents .. يتم تحديث PPCanvas ( عن طريق repaint ) ..

----

- الخطوة القادمة ( ان شاء الله ) ( رسم خط مستقيم + رسم الخطوط الارشادية التي تظهر أثناء رسم الخط .. وتختفي في حال انتهاء النقر على left/right mouse button ) .. هل يعرف أحد خوارزمية لعمل ذلك .. وتعميم هذه الخوارزمية لتطبيقها على الفرشاة + الصبغ + الممحاة .. الخ

اذا عملنا الخطوة هذه .. تكون بقية الادوات تتبع نفس الأسلوب ..

أتمنى المشاركة ,

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#39

مجهود مبارك اخي شمري

لقد إطلعت على الكود

انا ما عندي beans و لكن جربت اشغله بإستخدام ال JCreator ولكن لم اتمكن من ذلك .

بكل الأحوال

اقتباس
- الخطوة القادمة ( ان شاء الله ) ( رسم خط مستقيم + رسم الخطوط الارشادية التي تظهر أثناء رسم الخط .. وتختفي في حال انتهاء النقر على left/right mouse button ) .. هل يعرف أحد خوارزمية لعمل ذلك .. وتعميم هذه الخوارزمية لتطبيقها على الفرشاة + الصبغ + الممحاة .. الخ

سأزودك بالخوارزميه قريبا إن شاء الله

#40

السلام عليكم

هذه الخوارزميه لرسم الخط و المربع (طبعا سهلات جداا)

-هنا افترض وجود متغيريين عامين للإستخدام المؤقت , طبعا المتغيران يجب ان نستطيع الوصول لهما من الأحداث (events)

-في دوال الأحداث أفترض أن النظام (نظام الأحداث) يعطينا إحداثيات موقع الماوس من خلال المتغيرات X,Y

 Int x1,x2;

On_Mouse_Down(int x,int y){

		   X1=x;

		   X2=x;

}

On_Mouse_left”Release”(int x,int y){

  Switch (selectedTool==_Line){

  Case _Line{  

	Canvas.DrawLine(x1,y1,x,y); // or // BufferedImage.Draw….

  }

  Case _Square{

	Canvas.DrawSquare(x1,y1, abs(x-x1), abs(y-y1)); BufferedImage.Draw....

  } 

  }// Switch End

}// Mouse_left  End

بإنتظار (التغذيه الراجعه) , و بعدها أعطيك خوارزميات لباقي الأشكال إن شاء الله

#42

لم أعمل شيء :D .

ولكن من الممكن كتابة شيء .. لو اضاف أحد شيء ,, نحتاج تشجيع :-) .

سأحاول أضيف شيء جديد خلال اليومين القادمين .. ان شاء الله .,

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#43

السلام عليكم

كيف حالكم يا شباب

والله لي فترة أريد أن أكتب هنا لكن الإحباط أوقفني كثيراً

قمت بعملية إعادة تصنيع سريعة للشيفرة التي وضعها الأخ الشمري

وسأضعها لتحميس الهمم

على فكرة أكثر ما ضايقني في الشيفرة

هو جعل المتغيرات public واستخدامها بشكل مباشر

أربكني بشكل كبير

يبدو لي وكأنك لم تتعامل مع OO من قبل

(آسف إن أسأت لك في هذه الكلمة)

بإذن الله في أقرب فرصة سأحاول وضع تصميم جديد

سأحاول فيه إعطاء البرنامج صبغة المرونة بشكل أكبر

تحياتي

ppmain.rar

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#44

السلام عليكم

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

بس الملفات للاخ علاء مارشت تشتغل معاي ولا اعرف لماذا فهل يوجد واحد من الاخوان جربها وشافها تشتغل لو لا وحبيت اضيف انه الموضوع اعتقد صارله فتره متوقف ومافي اي تفاعل مع الموضوع

وشكرا لكل الاخوان الموجودين

عـــــــــــــادل

#45

مرحبا يا شباب

ممكن احد يحطلي الكود النهائي لمشروع الرسام في الرد او يحطه في ملف TXT في المرفقات عشان اقدر احمله

وانا مطلوب مني في الجامعه عمل برنامج الرسام لحالي وهذا صعب عليا وبما انكم عملتوه فياريت لو اعرف الكود عشان احاول افهمه واعمله انا تاني لحالي

ارجوا الرد وشكرا

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…