السلام عليكم ورحمة الله وبركاته
اولا اتمنى ان المشرفين ما يزعلون اني وضعت موضوع منفصل لحل تساؤل
قد كتبته قبل فتره في موضوع اخر
والحمدلله الذي دلني على موضوع كتبه اخوي SOLO.NET يتكلم عن الـ GDI
ذكر فيه شئ عن الـ Blend ولكنه لم يعطي مثال ... فالشكر لله ثم له
وللتاريخ اول مره ابحث في مكتبة الـ MSDN واخرج بنتيجه مفهومة على الاقل لي شخصيا
عموما حبيت اشارككم الافكار ومن له تعليق فمرحبا به
في المكتبة كان هناك مثال لرسم شكل بيضاوي بلونين متدرجين يكون احد الالوان بالاطراف واللون الاخر بالوسط
واليكم الشرح اولا يجب استدعاء فضاء الاسماء الخاص بالرسم الثنائي الابعاد
Imports System.Drawing.Drawing2D
ثم نعرف كائن للرسم ثم نسند له الكائن الذي سيتم عليه الرسم وفي حالتنا هو النموذج
Dim gr As Graphics = Me.CreateGraphics
ثم نعرف نقطة بداية ونهاية رسم الشكل البيضاوي ونسند لها قيم المحور السيني والصادي
Dim startPoint2 As New Point(20, 15) Dim endPoint2 As New Point(140, 15)
وللكلاس Blend عنصرين اساسيين الاول هو العوامل Factors والثاني المواقع Positions
لذا نعرف مصفوفه من نوع Single تمثل العوامل ونسند لها القيم التاليه
Dim myFactors As Single() = {0.2F, 0.4F, 0.8F, 0.8F, 0.4F, 0.2F}هذه الارقام هي عباره عن نسبة مؤية من لون البداية والنهاية واللون المدمج .. وسبب التدرج من صغير الى كبير ثم
الى صغير ليكون هناك لون في وسط لون اخر
ثم نعرف مصفوفه من نوع Single تمثل المواقع ونسند لها القيم التاليه
Dim myPositions As Single() = {0.0F, 0.2F, 0.4F, 0.6F, 0.8F, 1.0F}يجب ان يبدا بـ 0.0F وينتهي بـ 1.0F وتمثل المسافه الكلية من للرسم وكما اتفقنا انها كالنسبة المؤية
ثم نعرف كائن من الكلاس Blend لكي نتمكن من التعامل مع محتوياته
Dim myBlend As New Blend
ثم نربطه بالعوامل والمواقع التي انشأناها لينطلق على اساسها
myBlend.Factors = myFactors myBlend.Positions = myPositions
ثم ننشئ فرشة رسم وتاخذ المعاملات التاليه: نقطة البداية والنهاية ولونين
Dim lgBrush2 As New LinearGradientBrush(startPoint2, endPoint2, Color.Blue, Color.Red)
ثم نربط فرشة الرسم بعملية Blend
lgBrush2.Blend = myBlend
ثم نعرف مستطيل الرسم ونبين موقعه السيني والصادي وطوله وعرضه
Dim ellipseRect2 As New Rectangle(20, 15, 120, 80)
ثم نبدأ رسم الشكل البيضاوي ونبين فرشة الرسم ومستطيل الرسم
gr.FillEllipse(lgBrush2, ellipseRect2)
وهكذا تكون رسمت الشكل البيضاوي بلون يتوسطه لون اخر بتدرج ... فكيف الغي التدرج
لاحظت انك لو غيرت قيم العوامل من
{0.2F, 0.4F, 0.8F, 0.8F, 0.4F, 0.2F}
الى {0.1F, -0.1F, 0.0F, 0.0F, -0.1F, -0.1F -}
فسيلتغي التدريج باللون
واذا غيرت الارقام اليسرى السالبه الى موجبة فسيكون الثلث الايمن للشكل البيضاوي بلون والباقي بلون اخر والعكس صحيح
وهكذا اكون وصلت لمرادي بكتابة كلمة استطيع ان اغير لون احد حروفها الى لون اخر .. عن طريق الكود التالي
Dim gr As Graphics
Dim myFont As New Font("Arial", 140, FontStyle.Bold)
Dim myBlend As New Blend
Dim t As String
t = "باب"
gr = Me.CreateGraphics
Dim size As SizeF
size = gr.MeasureString(t, myFont)
Dim startPoint2 As New Point(50, 50)
Dim endPoint2 As New Point(50 + size.Width, 50)
Dim myFactors As Single() = {-0.1F, -0.1F, 0.0F, 0.0F, -0.1F, -0.1F}
Dim myPositions As Single() = {0.0F, 0.55F, 0.55F, 0.66F, 0.66F, 1.0F}
myBlend.Factors = myFactors
myBlend.Positions = myPositions
Dim lgBrush2 As New LinearGradientBrush(startPoint2, endPoint2, Color.Red, Color.Black)
lgBrush2.Blend = myBlend
gr.DrawString(t, myFont, lgBrush2, 50, 20)والمثال بالمرفقات
وارجو منكم اثراء الموضوع باقتراحاتكم وشرحكم الذي لا نستغني عنه

