Benutzer mit den meisten Antworten
Farbbilder in Grautonbilder zelegen.

Frage
-
Farbbilder konnten in VB 6.0 mit dem Datentyp Public Type RGBQUD // rgbBlue As Byte / rgbGreen As Byte / rgbRed As Byte / rgbReserve As Byte // End Type. in ihre drei Komponenten zerlegt werden. - In Visual Studio 2008 (unter dem Betriebssystem: Windows Vista) lese ich ein Farbbild wie folgt ein:
Dim pict As New Bitmap(Filename); With pict // Me.W-- / Me.H-- / Dim g As Graphics=Me.CreateGraphics / g.DrawImage(pict,0,0,.W--,.H--) / g.Dispose// End With.
Mit "pict.GetPixel" kann ich die Pixelwerte aus "pict()" z.B. in ein Feld "Matrix(W--,H--) As Color" einlesen, habe aber noch keine lauffähige Lösung dafür gefunden, wie die Pixel-Werte vom Typ "Color" aus "Matrix()" -oder auch aus "pict()" direkt- in drei Felder (vom Typ Byte) eingelesen werden können, die -wie die Felder vom Typ RGBQUAD in VB 6.0- jeweils nur eine der drei Farbkomponenten enthalten. Wer kann helfen?
- Verschoben Robert BreitenhoferModerator Freitag, 18. Februar 2011 13:08 Visual Basic .NET (aus:Generelle Fragen zu MSDN Online Deutschland oder den MSDN Foren)
Antworten
-
Hi,
kleines Beispiel (einen Button auf die Form ziehen)
Public Class Form1 Private _bmp As Bitmap = Nothing Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load _bmp = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height) Using g As Graphics = Graphics.FromImage(_bmp) g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias g.Clear(Color.MediumOrchid) g.FillEllipse(Brushes.Yellow, Me.ClientRectangle) End Using End Sub Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint If Not _bmp Is Nothing Then e.Graphics.DrawImage(_bmp, 0, 0) End If End Sub Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing If Not _bmp Is Nothing Then _bmp.Dispose() End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not _bmp Is Nothing Then Dim bmpRed As Bitmap = New Bitmap(_bmp.Width, _bmp.Height) For y As Integer = 0 To _bmp.Height - 1 For x As Integer = 0 To _bmp.Width - 1 Dim c As Color = _bmp.GetPixel(x, y) bmpRed.SetPixel(x, y, Color.FromArgb(255, c.R, 0, 0)) Next Next Dim frm As New Form() frm.BackgroundImage = bmpRed frm.ShowDialog() frm.Dispose() bmpRed.Dispose() Dim bmpGrayEasy As Bitmap = New Bitmap(_bmp.Width, _bmp.Height) For y As Integer = 0 To _bmp.Height - 1 For x As Integer = 0 To _bmp.Width - 1 Dim c As Color = _bmp.GetPixel(x, y) Dim avrg As Integer = (CType(c.R, Integer) + CType(c.B, Integer) + CType(c.G, Integer)) \ 3 bmpGrayEasy.SetPixel(x, y, Color.FromArgb(255, avrg, avrg, avrg)) Next Next Dim frm2 As New Form() frm2.BackgroundImage = bmpGrayEasy frm2.ShowDialog() frm2.Dispose() bmpGrayEasy.Dispose() End If End Sub End Class
Viele Grüße,
Thorsten
- Als Antwort markiert KarlTheodor Dienstag, 1. März 2011 16:39
Alle Antworten
-
Hallo karl,
ich habe einen code für Deine Frage gefunden:
http://www.codeproject.com/Articles/66253/Converting-Colors-to-Gray-Shades.aspx
Vielleicht hilft Dir dieser.
schöne Grüße Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort vorgeschlagen Ellen Ramcke Freitag, 4. März 2011 20:45
- Nicht als Antwort vorgeschlagen Ellen Ramcke Freitag, 4. März 2011 20:46
-
Hallo Ellen,
der Artikel, auf den Du hinweist, bezieht sich auf die Umwandlung von Farb- in Grautonbilder für die Ausgabe auf einem SW-Drucker. Mein Problen ist die Speicherung der drei Farbkomponenten in eigenen Dateien zum Zweck der weiteren Verarbeitung (z.B. Schwellenwertfindung; Formanalyse etc.). Für Deine Antwort danke ich Dir aber in jedem Fall herzlich.
Mit freundlichen Grüße
KarlTheodor
PS Mir steht z.Zt. nur VB 2008 zu Vefügung.
-
Hallo Karl,
dann schau Dir mal die Color-Struktur an. Ein Beispielcode die Farbwerte ARGB zu zerlegen
http://msdn.microsoft.com/de-de/library/system.drawing.color.aspx
schöne Grüße Ellen
Ich benutze/ I'm using VB2008 & VB2010- Als Antwort vorgeschlagen Ellen Ramcke Freitag, 4. März 2011 20:46
-
Hi,
kleines Beispiel (einen Button auf die Form ziehen)
Public Class Form1 Private _bmp As Bitmap = Nothing Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load _bmp = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height) Using g As Graphics = Graphics.FromImage(_bmp) g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias g.Clear(Color.MediumOrchid) g.FillEllipse(Brushes.Yellow, Me.ClientRectangle) End Using End Sub Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint If Not _bmp Is Nothing Then e.Graphics.DrawImage(_bmp, 0, 0) End If End Sub Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing If Not _bmp Is Nothing Then _bmp.Dispose() End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If Not _bmp Is Nothing Then Dim bmpRed As Bitmap = New Bitmap(_bmp.Width, _bmp.Height) For y As Integer = 0 To _bmp.Height - 1 For x As Integer = 0 To _bmp.Width - 1 Dim c As Color = _bmp.GetPixel(x, y) bmpRed.SetPixel(x, y, Color.FromArgb(255, c.R, 0, 0)) Next Next Dim frm As New Form() frm.BackgroundImage = bmpRed frm.ShowDialog() frm.Dispose() bmpRed.Dispose() Dim bmpGrayEasy As Bitmap = New Bitmap(_bmp.Width, _bmp.Height) For y As Integer = 0 To _bmp.Height - 1 For x As Integer = 0 To _bmp.Width - 1 Dim c As Color = _bmp.GetPixel(x, y) Dim avrg As Integer = (CType(c.R, Integer) + CType(c.B, Integer) + CType(c.G, Integer)) \ 3 bmpGrayEasy.SetPixel(x, y, Color.FromArgb(255, avrg, avrg, avrg)) Next Next Dim frm2 As New Form() frm2.BackgroundImage = bmpGrayEasy frm2.ShowDialog() frm2.Dispose() bmpGrayEasy.Dispose() End If End Sub End Class
Viele Grüße,
Thorsten
- Als Antwort markiert KarlTheodor Dienstag, 1. März 2011 16:39