الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة تحويل الصور الملونه الي صور ابيض واسود

بدأه a_pess في 12 مايو 2008 · 2 رد · 1,586 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوه الكرام

مرفق كود لتحويل الصور الملونه الي صور ابيض واسود

الكود تقريبا كامل لمن يريد استخدامه ومرفق ايضا الملف بالفيجوال استوديو 2008

الكود ببساطه يعتمد علي فتح صوره معينه وعرضها داخل PictureBox ومن ثم باستخدام +GDI وتحديدا استخدام ColorMatrix يتم اعادة رسم الصوره مره اخري بالوان ابيض واسود وبعد ذلك يتم عرض الصوره باللون الابيض والاسود داخل PictureBox اخر ومن ثم يمكن حفظ الصوره علي الهارد ديسك



Private Sub btnOpenColorImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenColorImage.Click

Dim dlg As OpenFileDialog = New OpenFileDialog()
Dim imagFilter As String = "Image files (*.jpg,*.jpeg,*.bmp,*.gif,*.png)|*.BMP;*.PNG;*.JPG;*.JPEG;*.GIF"

dlg.Filter = imagFilter

dlg.RestoreDirectory = True


If dlg.ShowDialog() = DialogResult.OK Then
Dim img As Image = Image.FromFile(dlg.FileName)

PictureBox1.Image = img.GetThumbnailImage(PictureBox1.Width, PictureBox1.Height, Nothing, Nothing)


End If
End Sub

Private Sub btnConvertToGray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvertToGray.Click

If PictureBox1.Image Is Nothing Then
Dim msgString As String = "Load the Colored Image"
Dim msgCaption As String = "Error"

MessageBox.Show(msgString, msgCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning)

Else
Dim grayImage As Image = PictureBox1.Image
Dim bm As Bitmap = New Bitmap(grayImage.Width, grayImage.Height)
Dim g As Graphics = Graphics.FromImage(bm)
Dim cm As System.Drawing.Imaging.ColorMatrix = New System.Drawing.Imaging.ColorMatrix(New Single()() _
{New Single() {0.3, 0.3, 0.3, 0, 0}, _
New Single() {0.59, 0.59, 0.59, 0, 0}, _
New Single() {0.11, 0.11, 0.11, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}})

Dim ia As System.Drawing.Imaging.ImageAttributes = New System.Drawing.Imaging.ImageAttributes()
ia.SetColorMatrix(cm)
g.DrawImage(grayImage, New Rectangle(0, 0, grayImage.Width, _
grayImage.Height), 0, 0, grayImage.Width, _
grayImage.Height, GraphicsUnit.Pixel, ia)
g.Dispose()
PictureBox2.Image = bm.GetThumbnailImage(PictureBox2.Width, PictureBox2.Height, Nothing, Nothing)

End If

End Sub

Private Sub btnSaveGrayImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSaveGrayImage.Click

Dim SaveFileDialog1 As New SaveFileDialog()
SaveFileDialog1.Filter = "Image files (*.BMP, *.JPG, *.GIF)|*.bmp;*.jpg;*.gif"

If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
If Not PictureBox1.Image Is Nothing Then
PictureBox2.Image.Save(SaveFileDialog1.FileName)
End If

End If
End Sub

End Class
Public Class Form1

توضيح اخير

الوان كل بكسل موجوده في اي صوره يتم تمثيلها ب 32 bit – وهذا الرقم يقسم كالاتي 8 لكل لون من الاحمر والاخضر والازرق و الفا Alpha أي (Red, Green, Blue, Alpha) وكل من هذه المكونات الاربعه عباره عن رقم يبدا من صفر الي 255 أي ببساطه شديده الصفر يعني انه كثافة اللون Intensity اقل ما يمكن و 255 تعني ان الكثافه اعلي ما يمكن

اما بخصوص الفا Alpha اذا كانت قيمته صفرا فهذا يعني ان الشفافيه كامله والرقم 255 يمثل اللا شفافيه الكامله Opaque

الفكتور الخاص باللون يعبر عنه بالاتي (R, G, B, A) حيث

R تمثل اللون الاحمر Red

G تمثل اللون الاخضر Green

B تمثل اللون الازرق Blue

A تمثل الفا Alpha

وهذا الفكتور اقل قيمه له هي (0, 0, 0, 0) واكبر قيمه له هي (255, 255, 255, 255)

+GDI تسمح باستخدام الارقام بين صفر وواحد 0 & 1 جيث الصفر يمثل اقل شدة كثافه للون Minimum Intensity و الواحد يمثل اقصي شدة كثافه Maximum Intensity

بالنسبه لتغيير الوان الصوره احنا بنستخدم مصفوفه كونه من 4 في 4 والنوع ده من المصفوفات يدعم فقك التغيير الخطي او الطولي Linear Transformation وده بيدعم فقط rotation & Scalling

اما التغيير غير الخطي او غير الطولي Non Linear بنستخدم معاه مصفوفه مكونه من 5 في 5 والعنصر الموجود في نقطة تقاطع الصف الخامس مع العمود الخامس في المصفوفه يجب ان يكون واحد

جرب تغير الارقام الموجوده في المصفوفه باستخدام ارقام بين الصفر والواحد وها تحس وتشوف الفرق

مثلا لو عايز الصوره تكون نيجاتيف جرب تغير الاررقام في المصفوفه كالتالي


Dim cm As ColorMatrix = New ColorMatrix(New Single()() _
{New Single() {-1, 0, 0, 0, 0}, _
New Single() {0, -1, 0, 0, 0}, _
New Single() {0, 0, -1, 0, 0}, _
New Single() {0, 0, 0, 1, 0}, _
New Single() {0, 0, 0, 0, 1}})

بالتوفيق

اخوكم عمر

ColorImageToGray.rar

تم تعديل هذه المشاركة بواسطة a_pess في 12 مايو 2008 في 21:25

#2

مشكور أخي الكريم لم نتعود منك إلا المفيد

واتقوا الله ويعلمكم الله

#3

جزيت الفردوس الأعلى

فاعلم أنه لا إله إلا الله

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…