المشاركات : 2
المواضيع 0
الإنتساب : Jan 2016
السمعة :
0
الشكر: 0
تم شكره 0 مرات في 0 مشاركات
شكراا جزيلا عاشت ايدك ....
المشاركات : 516
المواضيع 87
الإنتساب : Apr 2015
السمعة :
5
الشكر: 1435
تم شكره 417 مرات في 120 مشاركات
جزاك الله خيرا وجعلها في ميزان حسناتك
المشاركات : 11
المواضيع 0
الإنتساب : Mar 2016
السمعة :
1
الشكر: 18
تم شكره 6 مرات في 4 مشاركات
المشاركات : 730
المواضيع 66
الإنتساب : Apr 2014
السمعة :
25
الشكر: 1619
تم شكره 3502 مرات في 239 مشاركات
جزاك الله خير
موضوع رائع
شكرا لك
الحمد لله رب العالمين على كل شي
المشاركات : 1
المواضيع 0
الإنتساب : Apr 2016
السمعة :
1
الشكر: 3
تم شكره 2 مرات في 2 مشاركات
جزاك الله خير الجزاء
شرح جميل و خبرة قوية
المشاركات : 1
المواضيع 0
الإنتساب : Oct 2017
السمعة :
0
الشكر: 0
تم شكره 0 مرات في 0 مشاركات
احسنت استاذ شرح جدا جميل وبسيط بارك الله فيك وجزاك الله خير الجزاء ووفقك لفعل الخير
المشاركات : 191
المواضيع 8
الإنتساب : Feb 2015
السمعة :
8
الشكر: 243
تم شكره 242 مرات في 129 مشاركات
زادك الله من فضله و جزاك خير تقبل تحياتي
هَٰٓؤُلَآءِ قَوْمُنَا ٱتَّخَذُوا۟ مِن دُونِهِۦٓ ءَالِهَةً لَّوْلَا يَأْتُونَ عَلَيْهِم بِسُلْطَٰنٍۭ بَيِّنٍ فَمَنْ أَظْلَمُ مِمَّنِ ٱفْتَرَىٰ عَلَى ٱللَّهِ كَذِبًا
المشاركات : 531
المواضيع 37
الإنتساب : Oct 2019
السمعة :
219
الشكر: 609
تم شكره 1654 مرات في 584 مشاركات
الله يذكرك بالخير يا استاذ فوزي وين ماكنت واشكرك اختي على نقل الموضوع
لم يكن حريصا ومهتما فقط بالبرمجه بل ايضا باللغه العربيه فمنه عرفت ان ال التعريف
لا لايصح لغويا ان تربط مع كلمة "غير"
من موضوع كتبه معترضا على جملة الر سائل الغير مقروءة في المنتدى القديم.
تحياتي لكل الرائعين هنا وهناك
المشاركات : 1
المواضيع 0
الإنتساب : Jan 2022
السمعة :
0
الشكر: 0
تم شكره 2 مرات في 2 مشاركات
المشاركات : 109
المواضيع 14
الإنتساب : Mar 2021
السمعة :
4
الشكر: 235
تم شكره 88 مرات في 57 مشاركات
(28-09-12, 01:32 PM)ناديه الشجيري كتب : أولاً: شرح خوارزمية تحويل الصورة الملونة الى صورة ذات تدرج رمادي
أي صورة معروضة على الشاشة تتكون من عدة الآف من النقاط الضوئية تعرف بالبكسلات،
Any displayed image on the screen is made up of many thousands of tiny optical dots known as pixels
عدد هذه النقاط يعتمد على:
1- حجم الصورة Size of image .
كلما كان حجم الصورة أقل كان عدد العناصر أقل، والعكس بالعكس صحيح أيضاً.
2- درجة وضوح الصورة والدقة اللونية لها Resolution.
كلما كانت الدقة عالية كانت الحاجة الى عناصر اكثر، وبالتأكيد كثرة عناصر الصورة يعطي الصورة دقة وجمالية ورونق اكثر.
لن أكرر كلمة عناصر الصورة بعد هذا السطر، فأحياناً ترجمة المصطلحات الى العربية ( وخصوصاً في علوم الحاسوب ) يفقد الموضوع طعمه ونكهته، سأستبدلها بكلمة بكسل، وهي كلمة مسموعة ومتداولة أكثر وسهلة الإستخدام والتناقل.
لوفرضنا أن موبايلي بكاميرا 3.2 ميكابكسل، وهذا معناه أن ذلك الموبايل يلتقط صورة بدقة لونية تصل الى أكثر من ثلاثة ملايين بكسل للمساحة الصورية المحددة لصور الموبايل.
كل بكسل من هذا الكم الهائل يتألف من ثلاث ألوان رئيسة ( أحمر وأخضر وأزرق) لذا نسمع أحيانا عن مصطلح RGB وهو المقصود بالمكونات الثلاث الرئيسة للبكسل الواحد، وتخيل معي كيف سيصبح حجم الصورة تلك.
بالتأكيد ستقول أن حجم الصورة يتناسب طردياً مع دقة وتركيز الصورة، وهذا صحيح مائة بالمائة.
لذا إذا ما اردنا تفكيك الصورة، سنقول:
1- نفكك الصورة الى بكسلاتها، ونقرأ الصورة بكسل بكسل.
انظر كود تحويل الصورة كيف أني قرأت الصورة بكسل بكسل:
PHP كود :
For i = 0 To (your image ).Height - 1 For j = 0 To (your image ).Width – 1
كود قراءة البكسل هو Getpixel ستجده في النقطة التالية، كذلك من الصفر الى ارتفاع الصورة ومن الصفر الى عرضها، سنقوم بعملية مسح لكل بكسلات الصورة.
2- ثم سأفكك كل بكسل الى مكوناته الرئيسة، وأحتفظ بقيمة كل مكون في موقع خزني:
PHP كود :
red = (your image ).GetPixel(j, i).R green = (your image ).GetPixel(j, i).G blue =(your image ).GetPixel(j, i).B
3- خوارزمية تحويل الصورة الملونة الى صورة ذات تدرج رمادي هي في حساب المعدل اللوني، ثم رسم البكسلات من جديد ولكن بالإعتماد على المعدل اللوني بدل قيم المكونات الثلاث.
PHP كود :
avg = (red + green + blue) / 3 (your image ).SetPixel(j, i, Color.FromArgb(avg, avg, avg
))
كود إعادة رسم البكسلات هو SetPixel، وسحر التحويل الى صورة تدرج رمادي هو في تكرار قيمة المعدل في كل من مكونات الصورة الثلاث.
بقيت ملاحظتان:
أ- أنا في كود البرنامج كتبت With img ، لأتخلص من تكرار كلمة your image في كل مرة، وهذا أصلاً ليس له علاقة ولا يقرب للخوارزمية لا من قريب ولا من بعيد.
ب- هنالك خوارزمية أخرى لا تعتمد على المعدل بقدر إعتمادها على تكرار قيمة من قيم المكونات الثلاث للعنصر ثلاث مرات، مثل:
PHP كود :
(your image ).SetPixel(j, i, Color.FromArgb(red, red, red))
أو
PHP كود :
(your image ).SetPixel(j, i, Color.FromArgb(green, green, green))
أو تكرار اللون الأزرق، لكن طريقة المعدل هي الأفضل والأكثر دقة من غيرها.
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس الثاني سيكون تحويل الصورة الى صورة ثنائية.
ثانياً: شرح خوارزمية تحويل الصورة الملونة الى صورة ثنائية
وهي أبسط أنواع الصور, وتأخذ قيمتين فقط للألوان, وهما اللون الأسود واللون الأبيض.
وهذا النوع من الصور له تطبيقات كثيرة في رؤية الحاسوب, كأن تكون المعلومات المطلوبة للشكل العام ( طبياً صور أشعةْX دائماً تكون ثنائية ), أو الحدود الخارجية للجسم وكذلك لتحديد مكان الجسم وإدراكه من قبل الإنسان الآلي مثلاً، ( وفي التصوير الليلي غالباً ما يكون اللون الأخضر مع الأسود) أو التحقق من تشوهات الأجسام المصنوعة ( في المصانع تكون الحاجة الى الصور الثنائية في معرفة الشكل الخارجي للتصميم ومعرفة هل أن المنتج لا يطابق التصميم أو المواصفات المطلوبة), وغيرها من التطبيقات الملائمة لها.
ويمكن الحصول على الصور الثنائية من الصور الملونة أو من الصور ذات التدرج الرمادي بالإعتماد على عملية التعتيب Threshold Operation, وهي تحديد قيمة معينة لشرط العتبة, تتحول فيها الألوان الأعلى قيمة منها الى اللون الأبيض, والألوان الأدنى الى اللون الأسود ( أصلاً كلمة عتبة جاءت من الخشبة أو الحديدة التي نجدها في أرضية باب البيت أو الغرفة، فإذا تجاوزتها دخلت الغرفة وبالعكس فأنت خارجها ).
كود البرنامج مع الشرح:
1- نفكك الصورة الى بكسلاتها، ونقرأ الصورة بكسل بكسل.
PHP كود :
For i = 0 To (your image ).Height - 1 For j = 0 To (your image ).Width – 1
2- ثم سأفكك كل بكسل الى عناصره الرئيسة، وأحتفظ بقيمة كل مكون في معامل خزني:
PHP كود :
red = (your image ).GetPixel(j, i).R green = (your image ).GetPixel(j, i).G blue =(your image ).GetPixel(j, i).B
3- كذلك سأحسب المعدل اللوني لكل بكسلات الصورة، بإمكاني تحديد شرط العتبة عشوائياً مثلاً ( بما أن الحد الأعلى للون البكسل الأبيض يقارب 16 مليون والأدنى صفر، يمكنني أن أقول أن شرط العتبة هو 6 ملايين أو 7 ملايين أو 8 مثلاً ) لكن هذه الطريقة غير ناجحة لإحتمالات أن تكون الصورة ليلية، أو بالعكس في وضح النهار، وهنا يجب أن تعتمد العتبة ( أنا أسميتها thrshold ) على المعدل اللوني للصورة.
4- خوارزمية تحويل الصورة الملونة الى صورة ثنائية هي في حساب المعدل اللوني، فإن كان البكسل أكبر من معدل الصورة اللوني سنحوله الى أبيض، والعكس يتم تحويله الى الأسود، ثم رسم البكسلات من جديد ولكن بالإعتماد على القيمتين الناتجتين من عملية التعتيب Thresholding.
PHP كود :
If (red * green * blue) < (thrshold) Then bmap.SetPixel (j, i, Color.FromArgb(0, 0, 0)) Else : bmap.SetPixel (j, i, Color.FromArgb(255, 255, 255)) End If
لاحظ رسم البكسلات من جديد، اللون الأبيض كتبته FromArgb (255,255,255) بينما الأسود كتبته FromArgb (0,0,0).
تبقى ملاحظة واحدة وهي أني قسمت شرط العتبة على 4، حوال أن تجرب انت بدون التقسيم، أو أن تقسمه على3 أو 5 أو 6 لتحصل على أفضل النتائج.
**** لي رجاء يبقى، حاول أن تغير قيم FromArgb (0,0,0,) الى مثلاً FromArgb (50,50,50,) ولاحظ كيف سيخف اللون الأسود الى رصاصي غامق.
**** أو أن تبدل الأبيض بالأسود والأسود بالأخصر FromArgb (0,255,0,) وانظر الى النتائج.
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس الثالث سيكون تحويل الصورة الى Negative.
ثالثاً: شرح خوارزمية تحويل الصورة الى الـ Negative
لو سألتك ما هو عكس اللون الأسود فستجيبني أنه الأبيض، وما هو عكس اللون الأسود فستقول الأبيض، وما هو عكس اللون الأزرق، ستتأخر وسأجيبك قبل أن تبدو عليك سمات الخجل أنه الأصفر.
إذا العكس هو المكمّل اللوني، يعني لو جمعت قيمة اللونين معاً ( الأصل والعكس ) فسينتج اللون الأبيض ( أعلى الألوان قيمة )، لاحظ معي هذه المعادلة:
أبيض - اللون الأصلي = اللون العكس.
لو طبقتها على الأبيض أو الأسود ستحصل على ما قلته في بداية كلامي هنا.
أبيض – أبيض = أسود.
أبيض – أسود = أبيض.
أبيض – أزرق = أصفر.
أبيض – أصفر = أزرق.
من هذا المنطلق سأستخرج فكرة ( خوارزمية ) العكس، وهي أن أستخرج القيمة اللونية للبكسل، ثم أطرحها من اللون الأبيض.
وبإمكاني أيضاً أن أستخرج المكونات الثلاث لكل بكسل، وأطرحها من 255 وهي القيمة الأعلى لكل مكون ( أعلى قيمة للبايت = 255).
1- نفكك الصورة الى بكسلاتها، ونقرأ الصورة بكسل بكسل.
PHP كود :
For i = 0 To (your image ).Height - 1 For j = 0 To (your image ).Width – 1
2- ثم سأفكك كل بكسل الى عناصره الرئيسة، وأحتفظ بقيمة كل مكون في معامل خزني:
PHP كود :
red = (your image ).GetPixel(j, i).R green = (your image ).GetPixel(j, i).G blue =(your image ).GetPixel(j, i).B
3- سأستبدل القيمة المخزونة في ال red الى 255 – red، وكذلك للمكون الأخضر والأزرق.
PHP كود :
red = 255 – red If red < 0 Then red = 0
الخطوة الإخيرة إحترازية، لكيلا تكون قيمة المكون سالبة.
وبالتأكيد إعادة رسم البكسلات على الصورة من جديد بعد المعالجة.
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس الرابع سيكون زيادة أو نقصان إضاءة الصورة.
رابعاً: شرح خوارزمية تغيير إضاءة الصورة
تكملة لما شرحته في الخوارزميات الثلاث الأولى،
اليوم سنحاول تغيير ( زيادة أو نقصان ) إضاءة الصورة،
وأظنك تتذكر أني قلت في المحاضرة السابقة أن الأبيض هو أعلى القيم اللونية للبكسل، وبالعكس الأسود هوالأقل من بينهم، بل أن قيمة الأسود هي صفر، وليس أقل من الصفر قيمة يمكن أن تنسبها لأي بكسل في الشاشة.
مما سبق يتوضح مبدأ أن البياض يزاد بإزدياد القيمة اللونية لأي بكسل وبالتالي نزداد إضاءة الصورة ككل، كذلك السواد يزداد كلما قللنا القيمة اللونية له، مما يؤدي الى تقليل مستوى الإضاءة.
إذاً توضحت فكرة زيادة او تقليل مستوى الإضاءة، نزيد او نقلل القيمة اللونية فقط، ولديك طريقتان:
أ- أن تزيد او تقلل من القيمة اللونية للبكسل مباشرة.
ب- أن تزيد أو تقلل من قيم المكونات الثلاث للبكسل.
أنا سأستخدم الفكرة الثانية:
1- نفكك الصورة الى بكسلاتها، ونقرأ الصورة بكسل بكسل.
PHP كود :
For i = 0 To (your image ).Height - 1 For j = 0 To (your image ).Width – 1
2- ثم سأفكك كل بكسل الى مكوناته الرئيسة، وأحتفظ بقيمة كل مكون في موقع خزني:
PHP كود :
red = (your image ).GetPixel(j, i).R green = (your image ).GetPixel(j, i).G blue =(your image ).GetPixel(j, i).B
3- خوارزمية تغيير مستوى الإضاءة هو أن نضيف قيمة او ننقصها من كل مكون، مع الإحتراز من أن يعبر قيمة 255 في حال الـBrightness، أو ينقص عن قيمة الصفر في حال الـDarkness.
PHP كود :
red = red + Value If red > 255 Then red = 255 If red < 0 Then red = 0
لم يبق سوى إعادة رسك بكسلات الصورة، وهذا تجده مشروحاً في الدرس الأول.
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس الخامس سيكون تغيير الوان محددة في الصورة.
خامساً: شرح خوارزمية تغيير الوان محددة في الصورة
لن أطيل في الكلام ولن أزيد أكثر من سطر او سطرين على الخوارزمية السابقة:
بدل من إضافة قيمة معينة ومتساوية لكل مكون من مكونات البكسل، سنضيف قيمة لمكون واحد، أو قيم مختلفة للمكونات الثلاث.
انظر الصورة
PHP كود :
red = red + Value1 ' أي زيادة تضيف إحمراراً للصورة If red > 255 Then red = 255 If red < 0 Then red = 0 green = green + Value2 ' أي زيادة تضيف إخضراراً للصورة If green > 255 Then green = 255 If green < 0 Then green = 0 blue = blue + Value3 If blue > 255 Then blue = 255 ' يجب أن لا يتجاوز المقدار بعد الإضافة 255 If blue < 0 Then blue = 0 ' ولا أن يقل عن الصفر في حالة النقصان
ثم نعيد رسم البكسلات من جديد بالدالة SetPixel.
ملاحظة: لمن يرى ان الشرح مختصر جداً، أطلب منه أن يراجع شرح الخوارزميات التي سبق ونشرتها في المنتدى، الأجزاء 1 و 2 و 3.
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس السادس سيكون عكس الصورة Flipping.
سادساً: شرح خوارزمية قلب الصورة افقياً Flip Horizontal
تكملة لما شرحته في الخوارزميات الخمس الأولى، اليوم سنحاول قلب الصورة افقياً، ولن نتعامل اليوم مع ألوان البكسلات أكثر من قراءتها من موقع معين في الصورة ثم إعادة رسمها في الموقع المناظر له افقياً.
لو تمعنت معي كود قراءة البكسلات:
PHP كود :
For i = 0 To (your image ).Height - 1 For j = 0 To (your image ).Width – 1
لاحظ أن j هي التي تخص الصورة افقياً، بينما i تخص أعمدة الصورة، لذا سنركز على العداد j في موضوع قلب الصورة افقياً.
ولكي أسهل عليك فهم هذه الخوارزمية، لاحظ معي هذه المصفوفة المكونة من ثمانية مواقع 0
رمز برمجي:
الموقع 7 6 5 4 3 2 1 0
القيمة 214 86 56 92 67 85 77 11
سأقلب هذه المصفوفة افقياً، وأقصد بذلك أن أجعل القيمة 11 تجلس على الكرسي الأخير، وكذلك القيمة 214 تجلس على الكرسي 1، ونفس الفكرة للباقين.
هنا يجب أن نعرف كل قيمة ونظيرها في الموقع، أي الكرسي الأول يكون نظيره الأخير، والثاني يكون نظيره ما قبل الأخير، وهكذا.
لتصبح بعد القلب:
رمز برمجي:
الموقع 7 6 5 4 3 2 1 0
القيمة 11 77 85 67 92 56 86 214
كتابة الكود هي أن أن أقرأ البكسل ( i , j ) وأرسم قيمته في الموقع ( i , Width – j –1 )، وإن سألتني لماذا لا نرسمه في الموقع ( I –1, j Height –)، أقول لك أن الصورة في هذه الحالة ستنقلب عمودياً وليس افقياً.
انظر الى المصفوفة السابقة مرة أخرى، الموقع 0
سيتم رسمه في الموقع 8-0-1 = 7
وقيمة الموقع 1 ستجلس ضيفة معززة ومكرّمة في الموقع 8-1-1=6 ، وقيمة الموقع 3 مثلاً ستجلس في الموقع 8-1-3=4، وهكذا لبقية العناصر.
إذا خوارزمية البرنامج:
1- نفكك الصورة الى بكسلاتها، ونقرأ الصورة بكسل بكسل.
PHP كود :
For i = 0 To (your image ).Height - 1 For j = 0 To (your image ).Width – 1
2- ثم نعيد رسم البكسلات ( ننقلها من مواقعها الأصلية الى المواقع النظيرة):
قد لا تحتاج الى تفكيك اللون الى مكوناته الثلاث، لكني أستخدمت طريقة الـ Copy – Paste لكل الكودات في البرنامج، لذا تجدني أفكك اللون وأعيد رسمه، الأفضل عدم إشغال الـCPU بدوال ووظائف لا تحتاجها.
وعموماُ نعود الى الخوارزمية مرة أخرى،
إعادة رسم البكسلات في المواقع النظيرة هو:
PHP كود :
bmap.SetPixel(.Width - j - 1, i, Color.FromArgb(red, green, blue))
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس السابع سيكون قلب الصورة عمودياً.
سابعاً: شرح خوارزمية قلب الصورة عمودياً
لن أطيل في الكلام ولن أزيد أكثر من سطر او سطرين على الخوارزمية السابقة:
بدل من الإعتماد على العداد j في القلب، سنعتمد على العداد i لأنه صاحب العلاقة مع الصورة ومواقعها عمودياً.
سأكتفي هنا بسرد كود إعادة رسم البكسلات:
PHP كود :
bmap.SetPixel(j, .Height - i - 1, Color.FromArgb(red, green, blue))
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس الثامن سيكون قلب الصورة افقياً وعمودياً.
ثامناً : شرح خوارزمية قلب الصورة افقياً و عمودياً
لن أطيل في الكلام ولن أزيد أكثر من سطر او سطرين على ما سبق سوى:
أن الإعتماد هنا سيكون على العداد j في القلب الأفقي ، و العداد i في القلب العمودي، لأنهما صاحبا العلاقة مع الصورة ومواقعها افقياً عمودياً.
سأكتفي هنا بسرد كود إعادة رسم البكسلات:
PHP كود :
bmap.SetPixel(.Width - j - 1, i, Color.FromArgb(red, green, blue)) bmap.SetPixel(j, .Height - i - 1, Color.FromArgb(red, green, blue))
أرجو أن يكون شرحي بسيطاً ومفهوماً، والدرس التاسع سيكون مرآة الصورة Mirror.
ثامناً: شرح خوارزمية المرآة Mirror
تكملة لما شرحته في الخوارزميات السبع السابقة، اليوم سنحاول إيجاد مرآة للصورة، ولن نتعامل اليوم مع ألوان البكسلات أكثر من قراءتها من موقع معين في الصورة ثم إعادة رسمها في الموقع المقابل له افقياً أو عمودياً، إعتماداً على نوع أو لنقل مكان المرآة بالنسبة الى الصورة.
لذا سأكتب فكرة المرآة على أربعة أجزاء:
8.1 left to right mirror:
سأقلب الجزء الأيسر من الصورة وأرسمه على الجزء الأيمن منها، مع الحفاظ على الجزء الأيسر من الصورة دون قلب.
الفرق بين المرآة والقلب هنا هي أن الجزء الأيسر في المرآة يبقى نفسه، لا يتغير، بينما في القلب نعكس الصورة بأكمله، لاحظ الفرق في الصورة ادناه:
من هذه الصورة يتبين أن المرآة فرع من فروع القلب Flipping، وكل ما في الموضوع من فرق هو في نحديد حجم المنطقة المقلوبة.
تعال معي لنرَ كود البرنامج:
لو تمعنت معي كود قراءة البكسلات:
1- نفكك النصف ألأيسر من الصورة الى بكسلاتها، ونقرأها بكسل بكسل.
PHP كود :
For i = 0 To .Height – 1 For j = 0 To (.Width - 1)
2
لاحظ كيف أني لم أتجرأ على إتمام العداد الثاني، بل اني توقفت الى الحد الوسط من الصورة.
2- ثم سأرسم البكسلات التي تم قراءتها في المواقع المقابلة، ، فالموقع x سأرسمه في الموقع width – x ، هذه هي فكرة المرآة من اليسار الى اليمين.
PHP كود :
bmap.SetPixel(.Width - j - 1, i, Color.FromArgb(red, green, blue))
لن ارسم البكسلات في نفس مواقعها فلا حاجة لي في إعادة رسم نفس اللون في نفس الموقع.
الجزء الثاني
8.2 Right to left Mirror:
هنا سأقلب الجزء الأيمن من الصورة الى اليسار منها، وأبقي طبعاً على الجزء الأيمن سالماً من كل تغيير.
الفرق عن الفرع الأول هو في المنطقة التي سأحددها للقلب، لاحظ معي كود حصر المنطقة المطلوب قلبها:
PHP كود :
For i = 0 To .Height – 1 For j = (.Width - 1) 2 To .Width - 1
من الوسط الى أخر الطرف من الصورة، هذا هو الجزء الأيمن من الصورة،
وكود إعادة الرسم هو نفسه السابق، وكود رسم البكسلات في المواقع المقابلة هو:
رموز PHP:
PHP كود :
bmap.SetPixel(.Width - j - 1, i, Color.FromArgb(red, green, blue))
الدرس التالي
الجزء الثالث من مرآة الصورة
مرآة الجزء العلوي من الصورة
ثم الجزء الرابع والأخير
مرآة الجزء الأسفل من الصورة
إن شاء الله
__________________
الجزء الثالث
تكملة لما شرحته في الجزء الأول من الدرس الثامن، هنا الجزء الثاني منه، مرآة الصورة من الأعلى الى الأسفل، ومن الأسفل الى الأعلى.
8.3 top down mirror:
سأقلب الجزء الأعلى من الصورة وأرسمه على الجزء الأسفل منها، مع الحفاظ على الجزء الأعلى من الصورة دون قلب.
تعال معي لنرَ كود قراءة البكسلات:
1- نفكك النصف ألأيسر من الصورة الى بكسلاتها، ونقرأها بكسل بكسل.
PHP كود :
For i = 0 To (.Height – 1) 2 For j = 0 To .Width - 1
لاحظ كيف أني قرأت بكسلات الصورة من الأعلى ثم توقفت الى الحد الوسط من الصورة.
2- ثم سأرسم البكسلات التي تم قراءتها في المواقع المقابلة، ، فالموقع y سأرسمه في الموقع Height - y ، هذه هي فكرة المرآة من الأعلى الى الأسفل.
3- ثم أعيد رسم البكسلات العلوية ولكن في مواقع الصورة من الوسط الى الأسفل:
PHP كود :
bmap.SetPixel(j , . Height – i – 1 , Color.FromArgb(red, green, b
الجزء الثاني
8.4 down top mirror:
هنا سأقلب الجزء الأسفل من الصورة الى الأعلى منها، وأبقي طبعاً على الجزء الأسفل سالماً من كل تغيير.
الفرق عن الفرع السابق هو في المنطقة التي سأحددها للقلب، لاحظ معي كود حصر المنطقة المطلوب قلبها:
PHP كود :
For i = (.Height – 1) 2 To .Height – 1 For j = 0 To .Width - 1
من الوسط الى أخر الطرف من الصورة من الأعلى.
هذا هو الجزء الأسفل من الصورة، وكود إعادة الرسم هو نفسه السابق، وكود رسم البكسلات في المواقع المقابلة هو:
PHP كود :
bmap.SetPixel(j , . Height – i – 1 , Color.FromArgb(red, green, blue))
الدرس التاسع تحويل الصورة الى نحت طيني Emboss.
كل درس يوجد في المرفقات كملف ورد..وبرنامج مع الكود
موضوع شيق ورائع ومجهود لا يستهان به جزيت خيرا وكفيت شرا وزدت علما.
اللهم اني قد نذرت نفسي لمساعدت الاخرين فوفقني وكن لي معين
جاهز لمساعدة اي حد يحتاج لمساعدتي
طبيب اعشق البرمجة .
|