vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Rainer
Datum: 19.12.14 15:31

Hallo,
ich habe versucht den Extra-Tipp vom Oktober 2013, der in VB5/6 ausgeführt ist, in VB.NET zu konvertieren. Dieser Versuch ist mir leider nicht geglückt. Die Anpassung der API-Parameter ist mir nicht gelungen.
Hat jemand einen Hinweis, wo ich für VB.NET eine entsprechende Lösung finden kann?

Ansonsten wünsche ich Euch ein schönes Weihnachtsfest und einen guten Rutsch ins neue Jahr.
Rainer.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Manfred X
Datum: 19.12.14 17:24

Hallo!

Das Umwandeln in Graustufen geht in VB.Net aber völlig anders
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Rainer
Datum: 23.12.14 17:07

Hallo Manfred,
Dank für Deinen Hinweis. Damit geht die Umrechnung sehr schnell und hat auch das gewünschte Ergebnis.
Beim Versuch die Routine zu verstehen, habe ich durch die Modifikation der Matrixwerte, die nach meinem Verständnis als Faktoren für die Umrechnung der Farbanteile im Originalbild zu interpretieren sind, versucht zu verschiedenen Graustufen im umgerechneten Bild zu kommen. Das Ergebnis war ein ziemliches "Rumstochern", auf dessen Basis man schlechterdings einen Algorithmus aufbauen kann.
Also meine ergänzende Frage lautet: Welche Werte der Matrix muß man wie verändern, um das Bild als Graubild mit veränderter Helligkeit (Intensität) zu erhalten?
Gruß, Rainer.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Manfred X
Datum: 23.12.14 17:55

Hallo!

In diesem Tipp ist auch eine
Routine zur Erstellung der Colormatrix für Helligkeitsänderungen enthalten.

Oder hier ...

Um Leuchtstärke oder Sättigung zu modifizieren, bieten sich Operationen
im H-B-S-Farbraum an.
Hinweise findest Du z.B. hier ....
http://www.vbarchiv.net/tipps/details.php?id=1859

Beitrag wurde zuletzt am 23.12.14 um 18:09:19 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: GPM
Datum: 23.12.14 18:04

Du kannst die Matrix-Werte auch über
die Positionen ändern.

00,01,02,03,04 Die Positionen der Matrix
10,11,12,13,14
20,21,22,23,24
30,31,32,33,34
40,41,42,43,44

.Matrix40 = 0.2 '20% heller
.Matrix41 = 0.2
.Matrix42 = 0.2

.Matrix40 = -0.2 '20% dunkler
.Matrix41 = -0.2
.Matrix42 = -0.2


MfG GPM
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Rainer
Datum: 24.12.14 12:07

Hallo Manfred und GPM,
ich bedanke mich. Ihr habt mir sehr weitergeholfen.
Ich wünsche Euch und allen anderen Nutzern schöne Weihnachtsfeiertage und einen guten Rutsch in 2015.
Bis dann, Rainer.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Rainer
Datum: 27.12.14 14:18

Hallo Manfred,
meine Freude über die gefundene Lösung war scheinbar doch etwas vorschnell. Dein Hinweis auf den ActiveVB-Tipp 63 funktionierte auch ohne Weiteres (Download des Beispielprojektes). Als ich aber mit der Methode LOAD(<adr>) das Laden einer beliebigen Bilddatei einbaute und dann die Routine testete, brachte sie beim Aufbau der neuen Bitmap den Fehler "Ungültiger Parameter". Beim Suchen nach der Fehlerursache stellte ich fest, daß alle IMAGE-Eigenschaften - also auch Breite und Höhe des Quellbildes - als ungültig ausgewiesen wurden. Ich änderte daraufhin den Ladebefehl in IMAGE.FROMFILE(<adr>) und stellte fest, daß nunmehr die Bild-Eigenschaften mit dem Laden erhalten blieben. Beim Ansprung der Funktion "SetBrightnessContrastGamma" gingen diese Eigenschaften wieder verloren, sodaß trotzdem die Funktion auf den Fehler lief. Als Ursache habe ich festgestellt, daß die Typ-Wandlung CTYPE, die für den ersten Parameter der Funktion erforderlich ist, die Bild-Eigenschaften nicht in das Ergebnis der Typ-Wandlung übernimmt. Bei der Klärung der Frage, warum im ursprünglichen Beispiel diese Probleme nicht auftreten, stellte ich als einzigen Unterschied die Herkunft der Bilder fest: im ursprünglichen Beispiel wird das zu bearbeitende Bild aus der Projekt-Ressource entnommen. Deshalb habe ich eine meiner Bilddateien mit Hilfe der IDE in die Projekt-Ressource geladen und dann damit das Beispielprojekt gestartet und es lief fehlerfrei.
Soweit die Situation. Erhebt sich die Frage, kann ich an der Konvertierung zur BITMAP-Datei etwas verändern sodaß die Bild-Eigenschaften erhalten bleiben? Oder wie kann ich eine mit einem Dialogfeld ausgewählte Datei im Programmablauf als Projekt-Ressource laden (Ich habe bisher noch nie mit diesem Projektteil gearbeitet!)? Oder gibt es eine andere LÖsung für das Problem?
Vielleicht kannst Du mir noch einmal helfen.
Gruß, Rainer.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Manfred X
Datum: 28.12.14 10:36

Probiere ....
Public Class frmPicParam2
 
    Dim fh As Integer = 550
 
    Private WithEvents btnload As New Button With _
        {.Parent = Me, .TextAlign = ContentAlignment.MiddleLeft, _
        .Text = "B     C      G     &Laden", .Width = 150}
 
    Private WithEvents vsBright As New VScrollBar With _
        {.Parent = Me, .Top = 20, .Height = fh}
    Private WithEvents vsCont As New VScrollBar With _
        {.Parent = Me, .Top = 20, .Height = fh, .Left = 25}
    Private WithEvents vsGam As New VScrollBar With _
        {.Parent = Me, .Top = 20, .Height = fh, .Left = 50}
 
    Private pbOrg As New PictureBox With _
        {.Parent = Me, .SizeMode = PictureBoxSizeMode.Zoom, _
         .Top = 20, .Height = fh, .Left = 75, .Width = 300}
    Private pbModified As New PictureBox With _
        {.Parent = Me, .SizeMode = PictureBoxSizeMode.Zoom, _
         .Top = 20, .Height = fh, .Left = 390, .Width = 300}
 
    Private ofd As New OpenFileDialog With _
        {.Title = "Bilddatei", _
         .Filter = "Bild |*.jpg;*.gif;*.png;*.bmp;*.tif"}
 
 
    Private Function SetBrightnessContrastGamma _
       (ByVal InBitmap As Bitmap, _
        ByVal Bright As Single, _
        ByVal Cont As Single, _
        ByVal Gam As Single) As Bitmap
 
        If InBitmap Is Nothing Then Return Nothing
 
        If Bright > 1 Then Bright = 1
        If Bright < -1 Then Bright = -1
        If Cont > 1 Then Cont = 1
        If Cont < -1 Then Cont = -1
 
        If Gam = 0 Then Gam = CSng(Gam + 1.0E-45)
 
        Dim Diff As Single = (Bright / 2) - (Cont / 2)
 
        Dim Matrix As New Imaging.ColorMatrix(New Single()() _
                       {New Single() {1 + Cont, 0, 0, 0, 0}, _
                        New Single() {0, 1 + Cont, 0, 0, 0}, _
                        New Single() {0, 0, 1 + Cont, 0, 0}, _
                        New Single() {0, 0, 0, 1, 0}, _
                        New Single() {Bright + Diff, _
                                      Bright + Diff, _
                                      Bright + Diff, 0, 1}})
 
        Dim NewBmp As Bitmap
        With InBitmap
            NewBmp = New Bitmap(.Width, .Height, PixelFormat.Format24bppRgb)
 
            Using ImageAttr As New Imaging.ImageAttributes(), _
                NewBmpGra As Graphics = Graphics.FromImage(NewBmp)
 
                ImageAttr.SetColorMatrix(Matrix)
                ImageAttr.SetGamma(Gam)
 
                NewBmpGra.DrawImage(InBitmap, _
                    New Rectangle(0, 0, .Width, .Height), _
                    0, 0, .Width, .Height, _
                    GraphicsUnit.Pixel, ImageAttr)
            End Using
        End With
 
        Return NewBmp
    End Function
 
 
    Private Sub ChangeParam()
        With pbModified
            If Not .Image Is Nothing Then
                .Image.Dispose()
                .Image = Nothing
            End If
        End With
 
        With pbOrg
            pbModified.Image = SetBrightnessContrastGamma( _
                CType(.Image, Bitmap), _
                CSng(vsBright.Value / 100), _
                CSng(vsCont.Value / 100), _
                CSng(vsGam.Value / 1000))
        End With
 
    End Sub
 
 
    Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles Me.Load
 
        Me.Width = 700
        Me.Height = fh + 50
 
        vsBright.Minimum = -100
        vsCont.Minimum = -100
        vsGam.Maximum = 2000
        vsGam.Value = 1000
    End Sub
 
 
    Private Sub hsScroll(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.ScrollEventArgs) _
        Handles vsBright.Scroll, vsCont.Scroll, vsGam.Scroll
        ChangeParam()
    End Sub
 
    Private Sub btnload_Click _
        (sender As Object, e As System.EventArgs) Handles btnload.Click
 
        With ofd
            If .ShowDialog = DialogResult.Cancel Then Exit Sub
 
            Try
                With pbOrg
                    If Not .Image Is Nothing Then
                        .Image.Dispose()
                        .Image = Nothing
                    End If
 
                    Using bmp_in As New Bitmap(ofd.FileName), _
                        bmp As New Bitmap(bmp_in.Width, bmp_in.Height, _
                                          Imaging.PixelFormat.Format24bppRgb), _
                        gr As Graphics = Graphics.FromImage(bmp)
                        gr.DrawImage(bmp_in, 0, 0, bmp_in.Width, bmp_in.Height)
                        .Image = CType(bmp.Clone, Bitmap)
                    End Using
                    vsBright.Value = 0
                    vsCont.Value = 0
                    vsGam.Value = 1000
                    ChangeParam()
                End With
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End With
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: effeff
Datum: 28.12.14 17:28

Siehe http://msdn.microsoft.com/de-de/library/ms749020%28v=vs.110%29.aspx.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schnelle Umrechnung eines Farbbildes in ein Graustufenbild in VB.NET 
Autor: Rainer
Datum: 30.12.14 17:40

Hallo Manfred,
die von Dir dargestellte Lösung läuft bei mir. Ich bedanke mich.
Komm gut rüber in 2015.
Gruß Rainer.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel