السلام عليكم

كيف الحال انشاء الله بخير

ااعذروني شباب على تقصيري في موضوع البرمج الموجهه للكائنات بلغى سي ++

بيني وبينكم الموضوع ترا شويه ممل ومعقد

المهم

هنا انشاء الله راح اوريكم كيف نسوي برنامج بلغة VB.NET 2003  

البرنامج عباره عن فريم واحد  بس عن طريقة تفتح صورة عاديه وتحو

يلها الى صوره رماديه وبعدين تقدر تخزنها على امتداد GIF or JPG or BMP

البرنامج مره بسيط

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

 الفكره كلها تعتمد على تغير الصوره pixel pixel

كلنا نعرف انه الصوره عباره عن احداثيات كارتويه  (س,ص)   او (x,y) لكل احداثي لون معين على حسب الصوره

اوانتوا عارفين انه اللون في الكمبيوتر عباره عن ثلاثه مكونات الي هما  RGB  احمر واخضر  وازرق

االفكره كلها تعتمد على اخذ اللون لكل بكسل  ونحاول نسوي عليها عملية رياضية بسيطه وبعدين نغير اللون الاصلي ونحط بداله اللون الي  نبغاه والي  هو الرمادي ولكن لازم نحافظ على ملامح الصوره

كيف نحافظ على ملامح الصوره ؟  عن طريق  العملية الرياضيه الي  قلتلكم عليها وهي كالتالي

اول حاجه اللون الواحد زي  ما  قلت عباره عن 3  مكونات  

الكائن الواحد قيمته تتراح من 0 الى 255

احنا راح ناخذ  المكونات الثلاثه لكل بكسل ونجمعهم مع بعض  ونقسمهم على 3 وراح نحصل على قيمه خلوني اسميها  c

وهذه القيمه هي الي  نبغاها  والي  راح  نستخدمها لإنشاء اللون الجديد عن  طريق method  موجوده   اسمها setPixel   وهذي ال method   تاخذ 3  قيم  وهي الاحداثيات x,y  واللون المطلوب

 

النتيجه راح تكون زي كذا تقريبا

 

 
الكود راح يكون فيه 3 methods  اساسيه  ووظيفتهم  كالتالي

1) لفتح صوره openFile

2) لحفظ صوره saveFile

3) لتحويل الصوره الي رمادي makeGray

 

وعشان نسوي كذا لازم نستخدم مكونات  عددها 5

اول شيء  راح استخدمه ProgressBar  وهذا عشان بس  يبين كم باقي من الوقت

وراح يكون اسفل شيء في الفورم  وراح اعطيه اسم myBar  وهذي الصور راح توضح الفكره

 
وبعد كذا راح نظيف panel  ونسميها myPanel  هذي البانل راح نستخدمها عشان نظيف الصوره فيها

عن طريق method  او property  اسمها backGroundImage  وراح نخلي الخلفيه حق myPanel  بيضاء

ونخليها حاجزه باقي المساحه من  الفورم يعني نخلي myPanel  كــ fill

وهذه الصور توضح العملية

 
اوكي

بعد كذا راح اظيف كمان 2  dialogs  واحد لفتح الصور عن طريق الكمبيوتر زي والثاني عشان التخزين

اول واحد عشان الفتح راح يكون من نوع OpenFileDialog  وراح اسميه myOpen والثاني من نوع

saveFileDialog وراح اسميه mySave

ملاحظه : انا لما اقول راح اسميه اقصد  الاسم البرمجي الي راح نتحكم فيه برمجيا

وهنا الصور الي توضح العملية

 

 
الحين راح نكتب الكود لطريقة فتح الصور من الجهاز ولتخزينها في الجهاز على 3 امتدادات اما jpg او gif  او bmp

والكود راح يكون على هذا الشكل

 
الصوره الي في اليمين فيها الكود حق فتح الملف الي  اسمها openFile واليسار حق التخزين الي اسمها saveFile

وقبل لا اكمل لازم نفهم حاجه مهمه في الـ OpenFileDialog او الـ SaveFileDialog

في شيء يسموه filter  وهذا خاص بالامتداد

وانت حر تحدد الامتداد الي  تبغاه بس  هنا  في  حالتنا انا  لازم احدد امتداد للصور وهي ثلاثه bmp or gif or jpg

والصور الي تحت تبين الكلام هذا

 
 
لو تلاحظوا فوق في الصوره انا حددت في الفلتر الامتداد الي راح يظهر في myOpen or mySave

المهم

الحين لازم نظيف main menu  زي الي   موجود في اي برنامج  الي يسموه شريط القوائم

وهذا بسيط جدا كل الي  عليك تسويه انه تظيفه زي لما تظيف اي زر

والصوره الي تحت توضح العمليه

 

 
 
بعد كذا راح يظهر شريط القوائم في الفورم فوق

الحين لازم نظيف menu items  زي مثلا file or open or edit or etc

وهذي عملية بسيطه

في شريط القوائم الي اظفته راح تلقى فوق ملاحظه مكتوب عليها Type Here

هذا معناه انه بمجرد ما تكب راح تظيف قائمه

فكل الي عليك تسويه انه تظيف قوائم زي ما تبغى

وهنا في صوره توضح العمليه

 

 
 
لو تلاحظ في برنامج Microsoft Word  بمجر ما تضغط على زر Alt  شريط القوائم  راح يتفعل

وتلاحظ حرف F من قائمة File تحته خط

يعني لو ضغط زر Alt وحرف F على طول راح تدخل قائمة File

هذا الكلام تقدر تسويه في VB.NET في شريط القوائم

مثلا افرض انه نبغى نظيف قائمه اسمها My menu ونبغى الخط يكون تحت حرف الـ e

اكتب My m&enu

العلامه & تدل على انه الحرب الي بعدها راح يكون هو الحرف المفعل للقائمه

 

 

 
اباقي اخر method  الي هي مسئوله عن تحويل الصوره الي gray scaled  يعني رمادي

وهذه الـ method سهله جدا

اول حاجه لازم ناخذ الصوره الموجوده في myPanel ونخزنها في متغير من نوع Bitmap نفرض انه bmp

والآن لازم نشيك على كل pixel في bmp

عن طريق method  اسمها getPixel  الي ترسلها الاحداثيات وهي ترجع اللون بس على شكل byte

يعني لازم تغير القيمه المرجعه منها الى integer باستخدام method  اسمها Cint

االصوره الي تحت توضح العملية

 
 
الـ method الي اسمها makeGray راح تقوم بالتالي

اول حاجه راح ناخذ البكسل الاولى الي احداثياتها (0,0) وبعد كذا راح نفصل اللون الي 3 اجزاء الي RGB

وراح نحول كل جزء الى integer

ونجمعهم ونقسمهم على 3

وكذا انا تأكدت انه حصلت على اللون الرمادي المناسب مع الحفاظ على ملامح الصوره الاصليه

وبعدين راح اغير اللون في الصوره الاصليه عن طريق method  اسمها  setPixel والي لازم ترسلها الاحداثيات مع اللون المطلوب

والصوره الي تحت تبين العمليه

 
 
ملاحظه: الاحداثي السيني x  لازم يكون من الصرف الي عرض الصوره اما الاحداثي الصادي y لازم يكون من الصفر الي طول الصوره  
باقي الآن اضافة interaction  ما بين المستخدم والبرنامج

في القوائم الي اضفناها في قائمة File  وقائمة Open & Save & Close  راح نظيفلهم event  وهي DoubleClick event عن طريق الضغط ليهم مرتين بالماوس

وراح نستدعي الـ method  المناسبه لكل قائمه

وراح يكون الكود حاجه زي كذا

 
 
لو تلاحظوا في الكود الي فوق انا سويت event  لكل قائمه

يعني لو اليوزر او المستخدم ضغط على Close  راح يقفل البرنامج  هلم جرا

باقي الآن اضافة event  لي myPanel  وانا ابغاه بالشكل التالي

المستخدم يضغط على myPanel  مرتين بالماوس double click عشان يختار صوره من جهازه بدل من انه يضغط على قائمة File وبعدين على Open

كل الي راح اسويه انه راح ادخل على الكود ومن الكود راح اختار myPanel  وبعدين راح احدد من event list  الاكشن المطلوب الي  هو double click

وبعدين راح استدعي الـ  openFile Method

والصوره الي تحت تبين العملية

 

تحديد myPanel

تحديد الاكشن event لـ myPanel

الحين ما بقي الا حاجه وحده بس  (البرنامج مرفق مع هذا الموضوع كملف exe)

وهي انه نجرب البرنامج

اعمل رن للبرنامج وبعدين اختار صوره وبعدين اضط على Process  وبعدين على Gray Scaled وبعد كذا خزن الصوره بالامتداد الي تبغاه

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

والي عنده معلومه يشاركنا بيها ولا تبخلوا علين

ملاحظه: في البرنامج الي انا سويته في غلطتين

حاولوا تعرفوها وردوا عليا وانشاء الله نعدلهم

ملاحظه: لازم يكون الرد منطقي وبرمجي وهذا البرنامج موجه للناس الي عندهم خلفيه متوسطه في لغة VB.NET

الصور الي تحت تبين عملية التشغيل وهي بالتسلسل

 

 

 

 

 

 

 

 

 

 

   

 

 

 

 

 

 

 

 

 

Hosted by www.Geocities.ws

1