গত পর্বে GDI+ গ্রাফিক্স প্রোগ্রামে Brush অবজেক্টের ব্যবহার দেখানো হয়েছিল। সাধারণত ব্রাশ অবজেক্ট, যেকোনো ধরনের আকৃতির মধ্যবর্তী স্থানকে পূরণ করার জন্য ব্যবহার করা হয়। এই পর্বে বিটম্যাপ গ্রাফিক্সে কিভাবে একটি ছবিকে ব্রাশ অবজেক্ট ব্যবহার করে ভিন্নভাবে আঁকা যায় তা নিয়ে আলোচনা করা হয়েছে।
প্রথমেই একটি উইন্ডোজ প্রজেক্টে ফরম নিতে হবে। এরপর এর কোড উইন্ডোতে OnPaint নামে একটি সাবরুটিন লেখতে হবে। এই সাবরুটিনটি ভিবি ডট নেটের ডিফল্ট OnPaint মেথডকে ওভাররাইড করবে। ফরমের Class- এর মধ্যে নিচের লাইন দিয়ে সাবরুটিনটি লেখা শুরু করতে হবে।
Protected Overrides Sub OnPaint
এখানে উল্লেখ্য, উপরের লাইনটি লেখার ঠিক পরপরই Enter বাটনে চাপ দিলেই ভিবি ডট নেটের ইন্টেলিজেন্স স্বয়ংক্রিয়ভাবে নিচের কোডটুকু কোড উইন্ডোতে যোগ করবে।
Protected Overrides Sub OnPaint(ByVal e As _
System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
End Sub
এরপর PaintEventArgs - এর মাধ্যমে পাস করানো গ্রাফিক্স অবজেক্টের একটি ইনস্ট্যান্স তৈরি করতে হয়। এখানে Using কী ওয়ার্ডের মাধ্যমে কোর্ডের পরবর্তী অংশটুকু লিখতে হবে।
Using g As Graphics = e.Graphics
// here are the code that uses g instance
End Using
Using ব্লক ব্যবহার করার সুবিধা হলো যখনই ব্লক থেকে বের হয়ে কোডের পরবর্তী অংশের কাজ শুরু হবে তার আগেই Using -এ ব্যবহৃত অবজেক্টটি স্বয়ংক্রিয়ভাবে Dispose হয়, ফলে মেমরি খালি হয়ে যায়। গ্রাফিক্স অবজেক্টের Clear মেথড ব্যবহার করে ফরমটির ব্যাকগ্রাউন্ডের রঙ পরিবর্তন করতে হবে। এরপর একটি বিটম্যাপ ছবি সিলেক্ট করতে হবে যাকে এ প্রোগ্রামে ব্যবহার করা হবে। একটি Pen অবজেক্ট নিয়ে তার Brush প্রোপার্টিতে TextureBrush ঠিক করে দিতে হবে। TextureBrush ছবির Shape -এর অংশটুকু ছোট ছোট প্যাটার্ন দিয়ে পূর্ণ করবে। এরপর Translate Transform মেথড ব্যবহার করে অবজেক্টটি ফরমের নির্দিষ্ট অবস্থানে রেখে দেয়া যাবে। OnPaint মেথডটির সম্পূর্ণ কোড নিম্নরূপ :
Protected Overrides Sub OnPaint(ByVal e As _
System.Windows.Forms.PaintEventArgs)
Using g As Graphics = e.Graphics
g.Clear(Color.LightSalmon)
Using myPen As New Pen(Color.Empty, 350)
myPen.Brush = _
New TextureBrush( _
New Bitmap("C:\starfish.jpg"))
g.TranslateTransform(0, 0)
g.DrawLine(myPen, 10, 0, 250, 0)
End Using
End Using
MyBase.OnPaint(e)
End Sub
এখানে প্রোগ্রামটি রান করানো হলে তা চিত্র-১-এর মতো দেখাবে।
GDI+ টুলসের মধ্যে এক রঙের মাধ্যমে আকৃতি পূর্ণ করার জন্য SolidBrush অবজেক্ট এবং খুবই উচ্চমানের hatch প্যাটার্ন দিয়ে আকৃতি পূর্ণ করার জন্য HatchBrush অবজেক্ট ব্যবহার করা হয়।
এবারে জটিল একটি গ্রাফিক্স নিয়ে কাজ করা যাক। প্রজেক্টটিতে নতুন আরেকটি ফরম যোগ করে ফরমটির OnPaint ইভেন্টির ওভাররাইড মেথড কোড লিখতে শুরু করুন।
Protected Overrides Sub OnPaint(ByVal e As _ System.Windows.Forms.PaintEventArgs)
এরপর ফরমের একটি HScrollBar (Horizontal Scroll Bar) যুক্ত করুন। কোড উইন্ডোতে নিচের কোডগুলো যুক্ত করুন।
Imports System.Drawing.Drawing2D
Public Class Form1
Private PositionArray(2) As Single
Private FactorArray(2) As Single
Protected Overrides Sub OnPaint( _
ByVal e As System.Windows.Forms.PaintEventArgs)
Dim g As Graphics = e.Graphics
Using lgBrush As LinearGradientBrush _
= New LinearGradientBrush( _
Me.ClientRectangle, _
Color.Blue, Color.Red, _
LinearGradientMode.Horizontal)
Dim myBlend As Blend = New Blend(2)
myBlend.Factors = FactorArray
myBlend.Positions = PositionArray
lgBrush.Blend = myBlend
g.FillRectangle( _
lgBrush, Me.ClientRectangle)
MyBase.OnPaint(e)
End Using
End Sub
Private Sub HScrollBar1_Scroll( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.ScrollEventArgs) _
Handles HScrollBar1.Scroll
PositionArray(1) = HScrollBar1.Value / 91
Me.Invalidate()
End Sub
Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
FactorArray = New Single() {0.0, 0.5, 1.0}
PositionArray = New Single() {0.0, 0.5, 1.0}
SetStyle(ControlStyles.AllPaintingInWmPaint Or _
ControlStyles.OptimizedDoubleBuffer Or _
ControlStyles.UserPaint, True)
End Sub
End Class
এই উদাহরণে ফরমটির ব্যাকগ্রাউন্ডের রঙ ScrollBar -এর ওঠানো-নামানোয় পরিবর্তিত হবে (চিত্র-২)।
ফরমের সর্বোচ্চ রঙ ঠিক করা হয়েছে লাল ও সর্বনিম্ন নীল এবং মধ্যবর্তী অবস্থান Shade ব্যবহার করা হয়েছে। যে কারণে Brush হিসেবে এখানে LinearGradientBrush ব্যবহার করা হয়েছে। ScrollBar-এর Scroll ইভেন্টে Invalidate নামে একটি মেথড ব্যবহার করা হয়েছে। যার ফলে ক্রলবার ওঠা-নামা করানোর সময় রঙের পরিবর্তনের জন্য ফরমের লোড হতে খুবই কম সময় লাগে।
আশা করি ওপরের আলোচনা থেকে GDI+ টুলস ব্যবহার করে ভিবি ডট নেটে গ্রাফিক্স ব্যবহারের কৌশল বুঝতে পেরেছেন।
কজ ওয়েব
ফিডব্যাক : marufn@gmail.com