لمحة جافاوية 14 كيف ترسم صورة بالجافا

السلام عليكم

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

public void savePic() throws IOException{

	int w = getWidth(), h = getHeight();//طول وعرض الوصورة

	//نقوم بتحضير الصورة

	BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);

	//نقوم بتكوين الكائن الذي يمكننا من الرسم على الصورة

	Graphics2D g2d = image.createGraphics();

	//نقوم ببناء هذه الدالة التي تقوم بالرسم على الصورة

	paint(g2d);

	//انتهينا من الرسم فنقوم بالتخلص من كائن الرسم

	g2d.dispose();

	//نريد تخزين الصورة وعلى هذا نحتاج إلى مكان لنخزن فيه

	JFileChooser save=new JFileChooser();

	save.setDialogType(JFileChooser.SAVE_DIALOG);

	save.showSaveDialog(this);

	File file = save.getSelectedFile();

	if(file!=null){

		//عملية تخزين الصورة على المكان الذي اخترناه

		ImageIO.write(image, "jpeg",file);

	}

}

الآن ابتسموا لنأخذ صورة تذكارية
هيه عبده يا دب لا تقوم بعمل قرنين لسيد
تشيك شلاك
بعد أن أنجزنا مهمتنا بسلام
نعود إلى قواعدنا
أراكم في مواضيع أخرى

تحياتي

Tags: , , , , , ,

20 Responses to “لمحة جافاوية 14 كيف ترسم صورة بالجافا”

  1. عبدو قال:

    كل التحية الك يا نوارة
    روعة كتير درس اليوم والصورة طلعت من احلى ما يكون تحياتي :)

  2. admin قال:

    مش قلتلك اضحك
    بس منور الصورة يا معلم

    تحياتي

  3. Adnan قال:

    شكرا عالشرح مفيد

  4. admin قال:

    على الرحب والسعة أخ عدنان

    تحياتي

  5. واهد نفر قال:

    مشكور أخي علاء بس ممكن توضحلنا عمل دالة paint?

    ومن أين يتم إدخال الصوره المراد حفظها؟

  6. admin قال:

    يتم الرسم في الدالة paint كما وضحت في الشرح
    وكأنك ترسم على إطار Frame أو لوحة Panel
    إذا لم تضح الصورة أخبرني وسأحاول أن أوضح أكثر

    تحياتي

  7. M.Allaw قال:

    أشكرك أخي العزيز علاء لكن تقوم برسم الداله بنفسك أم تقصد أنها تضع صوره مخزونه مسبقاً وتقوم بعرضها على الـJPanel?

    أتمنى لك مزيد من التقدم

  8. admin قال:

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

    تحياتي

  9. M.Allaw قال:

    أهاااا مشكور حبيبي بس ممكن تعطيني الكود حق دالة الـpaint وسامحني على ثقل دمي :)

  10. admin قال:

    غريب أمرك يا محمد
    نفس الدالة التي تستخدمها للرسم على المكونات
    لكن وبما أنك ثقيل دم :) فأنت تستحق معاملة خاصة

    public void paint (Graphics2D g2d){
    //g2d.drawAnithing(someParameters);
    }
    

    حيث الدالة drawAnithing موجودة في الفئة Graphics2D
    بالمناسبة أمزح في موضوع ثقل الدم
    أتمنى لك التوفيق
    وأي أسئلة أخرى فأنا في الخدمة

    تحياتي

  11. M.Allaw قال:

    أهااااااااااا الـpaint حق الأبلت كخخخخخخخخخخخخ <== بالله أنت كذا دائماً أهبل ولا أهبل صيفاً وغبي شتاءاً :)

    ولما قلت رسم فهمت أنه رسم بالماوس مثل الرسام كخخخخخخخخخخخ
    مشكور حبيبي علاء والعفو لو تعبتك

    تقبل تفحيطي :)

  12. admin قال:

    ههههههههه
    ترى عفرت الرمل علي

    تحياتي

  13. java student قال:

    مساء الخير

    ممكن لو سمحت تشوف هذه الكود ليش ما يشتغل

    انا ابغاه يرسم بيكسلات على الصوره
    احداثيات البيكسلات معرفه من عند ال user

    لكن نواقذ الادخال ما تطلع حتى تسمح للuser بادخال القيم

    وهذا رابط الكود
    http://up3.m5zn.com/download-2009-5-10-04-whznulciy.java
    امكن فيه شي ناقص في الكود
    انا مو عارفته ياليت تساعدني

  14. admin قال:

    عندما تقومين بإضافة applet إلى Frame
    فإنه يعامل كمكون عادي component
    وهذا يعني أنه لن يتم مناداة الدالة init
    لكي تحصلي على نفس سلوك applet
    نادي init بنفسك
    على كل لا أدري لماذا لم ترسمي مباشرة على Frame؟
    هل هناك تفسير معين؟
    على فكرة لو شغلتي الأبلت خاصتك في المتصفح أو في appletViewer
    فهو يعمل

    تحياتي

  15. java student قال:

    شكرا شكرا يعطيك الف عافيه (البرنامج اشتغل لما ناديت الدالة init();
    في الmain)

    بالنسبة لاستخدام ال applet هو لاني ابغى ارسم بيكسلات مستقيم ( بنفذ خوارزميات رسم مستقيم اوضح اللمستخدم كيف يترسم المستقيم )

    وانا اعرف الapplet اسهل في الرسم

    واخذت راي ثاني يفهم في الجافا قالي الapplet اسهل

    انت ايش رايك ؟؟؟؟ اكمل بال applet ولا احول على ال panal

    انا بتعلم الجافا عن طريق ال self study
    ولهذا السبب اسال من النت واخذ براي مبرمجين الجافا

    عندي سوال ثاني انا بسوي هذا البرنامج بواجهات
    ابدا بتصميم الواجهة على ابلت كمان بما انه البرنامج ابلت
    هل لو كان البرنامج applet اقدر اخلي برنامجي portable اقصد بيها اول ما ادخل السي دي يشتغل البرنامج

    سوالي الاخير والمهم جدا بالنسبة للبرنامج ؟؟؟

    ابغى البكسلات التي تظهر على الشاشه كبيره
    كيف اسوي ؟؟
    لقيت الميثود هذه بس ما اشغلت معاي ( اكيد في شي اسويه قبل تنفيذ هذه الميثود)
    بحثت عنها بس ما لقيت
    setPixels(int x, int y, int w, int h, int[] iArray)
    Sets all samples for a rectangle of pixels from an int array containing one sample per array elemen
    هل صحيح فهمي هذه الميثود تكبر البيكسل تبع الصوره

  16. admin قال:

    applet ,Frame لا يوجد اختلاف كبير بينهم في عملية الرسم
    كل ما هنالك أن applet يعمل في صفحة ويب أما Frame فيعمل كتطبيق سطح مكتب
    لا أسهل ولا أصعب فكلهم بنفس الآلية
    portable معناها يعمل بدون اعتماد على نظام التشغيل
    بينما أنت تتكلم عن شيء آخر
    على كل حال applet لوحدها لن تعمل إلا لو وضعتها في صفحة ويب أو شغلتها باستخدام appletViewer أو أضفىتها إلى Frame
    بالنسبة لموضوع setPixels فليس لدي أي معلومات حول الموضوع
    على كل برنامجك لم يعمل لدي

    تحياتي

  17. java student قال:

    انا هنا اضفت الابلت الى فريم

    البرنامج يشتغل ما طلعتلك نوافذ الادخال بعد ما استدعينا الداله ّinit
    في ال main

    بس ما كملت البرنامج انا لسه بافي حالات اخرى سويت هنا لحاله وحده
    فممكن تدخل ارقام وما راح يرسم
    دخل هذه الارقام ويزبط الوضع 10,5,3,3
    راح يترسم مستقيم صغير جدا
    حاليا انا ببحث عن ميثود تكبر البكسلات

  18. admin قال:

    موضوع التكبير البيكسيل هذا خاطئ تماماً
    المصطلح الأصح هنا زيادة عرض الخط
    وهذا ممكن عن طريق Graphics2D
    باستخدام الدالة setStroke

    تحياتي

  19. java student قال:

    مساء الخير

    ممكن تشوف الغلط في المساله هذه ايش

    انا حولت من ابلت الى بانل
    وصممت واجهة
    وابغى المستخدم اذا ضغط الزر تطلعله نوافذ الادخال
    وبعدين يترسم المستقيم
    الشغل يكون ماشي تمام
    لكن الرسمه ماتضهر مو عارفه ليش ؟؟؟؟
    اكيد فيه شي ناقص
    هذا رابط الكود
    http://up3.m5zn.com/download-2009-5-16-11-wkala6mnh.java

  20. admin قال:

    لديك مشكلة بينة في منظم المحتوى LayoutManager
    أن تقومي بعمل منظم المحتوى LayoutManager خاص بك ليس بالأمر السهل
    أنصحك باستخدام أحد منظمي المحتوى الموجودين في جافا BorderLayout BoxLayout

    تحياتي

Leave a Reply