سلام. مثل اینکه دوستان روش تهیه تصویر از فرم رو گفتن. دیگه لازم نیست اونو بگم.
برای سیاه سفید کردن یک تصویر دو راه وجود داره.
اول اینکه رنگ هر پیکسل رو گفته، میانگین رنگ رو محاسبه و دوباره مقدار دهی کنید که روش وقت گیری هست.
روش دوم روش استفاده از colormatrix هست که سرعتش هم بالاست . برای این کار دوتا تابع می نویسم. هر دوتا تابع باید توی فرم باشن اما دقت کنید که شما فقط باید تابع اولی رو یعنی grayscale رو فراخوانی کنید و تصویر مورد نظر رو بهش بدید. خروجی تابع فوق هم تصویر سیاه سفید هستش.
تابع اول:
Public Function grayscale(ByVal img As Image) As Image
Dim cm As ColorMatrix = New ColorMatrix(New Single()() _
{New Single() {0.299, 0.299, 0.299, 0, 0}, _
New Single() {0.587, 0.587, 0.587, 0, 0}, _
New Single() {0.114, 0.114, 0.114, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}})
Dim cm2 As ColorMatrix = New ColorMatrix(New Single()() {New Single() {0.299, 0.299, 0.299, 0, 0}, New Single() {0.587, 0.587, 0.587, 0, 0}, New Single() {0.114, 0.114, 0.114, 0, 0}, New Single() {0, 0, 0, 1, 0}, New Single() {0, 0, 0, 0, 1}})
Return draw_adjusted_image(img, cm)
End Function
تابع دوم:
Private Function draw_adjusted_image(ByVal img As Image, _
ByVal cm As ColorMatrix) As Image
Try
Dim bmp As New Bitmap(img) ' create a copy of the source image
Dim imgattr As New ImageAttributes()
Dim rc As New Rectangle(0, 0, img.Width, img.Height)
Dim g As Graphics = Graphics.FromImage(img)
' associate the ColorMatrix object with an ImageAttributes object
imgattr.SetColorMatrix(cm)
' draw the copy of the source image back over the original image,
'applying the ColorMatrix
g.DrawImage(bmp, rc, 0, 0, img.Width, img.Height, _
GraphicsUnit.Pixel, imgattr)
g.Dispose()
Return img
Catch
Return img
End Try
End Function