Private Xpos As Integer Private Ypos As Integer Private colR As Integer Private colG As Integer Private colB As Integerමෙහි Xpos හා Ypos වලින් එක් එක් Pixel එකේ X හා Y අගයන් ලබා ගැනීමද colR, colG හා colB වලින් එක් එක් Pixel එකේ Red, Green හා Blue Values ලබා ගැනීමද කරනවා. දැන් Grayscale effect එක සඳහා පහත Code එක ලියා ගන්න.
Private Sub Grayscale()
Dim img As New Bitmap(picImage.Image)
Dim colRGB As Integer
Progressbar.Maximum = img.Width
For Xpos = 0 To img.Width - 1
For Ypos = 0 To img.Height - 1
colR = img.GetPixel(Xpos, Ypos).R
colG = img.GetPixel(Xpos, Ypos).G
colB = img.GetPixel(Xpos, Ypos).B
colRGB = (colR * 0.33) + (colG * 0.33) + (colB * 0.33)
img.SetPixel(Xpos, Ypos, Color.FromArgb(colRGB, colRGB, colRGB))
Next
Progressbar.Value = Xpos
Next
picImage.Image = img
Progressbar.Value = 0
End Sub
මුලින්ම මෙහි සිදුකර ඇත්තේ img යනුවන් Bitmap Object එකක් සාදා ගැනීමයි. මෙහි Constructor එක වශයෙන් picImage නැමති Picture Box එකෙහි Image එක භාවිතා කර තිබෙනවා. ඉන් පසු For loops දෙකක් භාවිතා කර img Object එකෙහි එක් එක් Pixel එකෙහි ඇති R,G හා B Values Variables වලට අරගෙන තියෙනවා. Bitmap Class එකෙහි GetPixel function එකෙන් Pixel වල වර්ණය ලබා ගත හැකියි. ඉන් පසු කර ඇත්තෙ colRGB යනුවෙන් නව වර්ණයක් සාදා ගැනීමයි. නව වර්ණය සාදා ගැනීම සඳහා එක් එක් R,G හා B Values 0.33 ගුණ කර නැවත ඒ සියල්ල එකට එකතු කර ගෙන ඇත. ඉන් පසු මෙම නව වර්ණය මුලින් වර්ණ ලබා ගත් Pixel එකටම SetPixel Function එක මඟින් ඇතුලත් කර ගෙන තිබෙනවා. අවසානයේ දී picImage.Image = img යන්නෙන් අපි Grayscale අකාරයට වෙනස් කර ගත් img Object එක picImage වල Image එක වශයෙන් ලබා දී තිබෙනවා. මීට අමතරව මා මෙහි Progress bar එකක් ද භාවිතා කර ඇත. පහතින් මම ලබා ගත් මුල් රූපය හා Grayscale ආකාරයට වෙනස් කර ගත් රූපය දක්වා ඇත.Emboss Effect එක ලබා දීම.
මේ සඳහා පහත Code භාවිතා කරන්න.
Private Sub Emboss(ByVal amount As Byte)
Dim img As New Bitmap(picImage.Image)
Dim colR1 As Integer
Dim colG1 As Integer
Dim colB1 As Integer
Progressbar.Maximum = img.Width
For Xpos = 0 To img.Width - (amount + 1)
For Ypos = 0 To img.Height - (amount + 1)
colR = img.GetPixel(Xpos, Ypos).R
colG = img.GetPixel(Xpos, Ypos).G
colB = img.GetPixel(Xpos, Ypos).B
colR1 = img.GetPixel(Xpos + amount, Ypos + amount).R
colG1 = img.GetPixel(Xpos + amount, Ypos + amount).G
colB1 = img.GetPixel(Xpos + amount, Ypos + amount).B
colR = Math.Min(Math.Abs((colR - colR1) + 128), 255)
colG = Math.Min(Math.Abs((colG - colG1) + 128), 255)
colB = Math.Min(Math.Abs((colB - colB1) + 128), 255)
img.SetPixel(Xpos, Ypos, Color.FromArgb(colR, colG, colB))
Next
Progressbar.Value = Xpos
Next
picImage.Image = img
Progressbar.Value = 0
End Sub
මෙහිදී ද කලින් මෙන් එක් එක් Pixel එකෙහි වර්ණය ලබා ගෙන එම වර්ණය යම් ආකාරයකට වෙනස් කර නැවත එම Pixel එකටම ආදේශ කරගෙන ඇත. මීට අමතරව මෙහිදී මම amount යනුවෙන් Parameter එකක් භාවිතා කර ඇති අතර මින් Emboss විය යුතු ප්රමාණය ලබා දිය හැකිය. පහතින් මම ලබා ගත් මුල් රූපය හා Emboss කර ගත් රූපය දක්වා ඇත.මීලඟ ලිපියෙන් තවත් Effects කිහිපයක් හා මේ Effects සියල්ල එක් කර සාදා ගත් Application එකක් ලබා දෙන්න බලාපොරොත්තු වෙනවා. එහෙනම් අදට නවතිනව.



