tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
716
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Nightking Nightking ist offline Rookie
    Registriert seit
    Feb 2007
    Beiträge
    6
    Hallo zusammen

    Ich habe ein Problem beim einfärben eines Bildes, und zwar, wenn ich ein Bild einfärbe zB rot,sprich, ich entferne den Grün- und Blauanteil des Bildes und füge ich den Grünanteil wieder hinzu wird es Gelb. Soweit korrekt, nur wenn ich das Bild, rot eingefärbt, übernehme und den Grünanteil im nachhinein hinzufügen möchte ändert sich das Bild nicht mehr. Theoretisch müsste es ja Gelb werden

    Ablauf:
    Der Benutzer öffnet ein Bild und dieses wird in eine Picturebox geladen. Neben der Picturebox hat es drei Trackbars (RGB) mit dennen man den Farbanteil regeln kann.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    
     
    Sub farbdef()
       
            Dim image As Image = Me.PictureBox1.Image
     
            Dim imageAttributes As New ImageAttributes()
            Dim width As Integer = image.Width
            Dim height As Integer = image.Height
     
            Dim colorMatrixElements As Single()() = { _
             New Single() {Me.TrackBar_red.Value / 100, 0, 0, 0, 0}, _
             New Single() {0, Me.TrackBar_green.Value / 100, 0, 0, 0}, _
             New Single() {0, 0, Me.TrackBar_blue.Value / 100, 0, 0}, _
             New Single() {0, 0, 0, Me.TrackBar_Alpha.Value / 100, 0}, _
             New Single() {0, 0, 0, 0, 1}}
     
            Dim colorMatrix As New ColorMatrix(colorMatrixElements)
     
            imageAttributes.SetColorMatrix( _
               colorMatrix, _
               ColorMatrixFlag.Default, _
               ColorAdjustType.Default)
     
            'Neue 32bit Bitmap erstellen
            Dim NewBitmap = New Bitmap(image)
     
            'Resolution (DPI) vom Quellbitmap auf Zielbitmap übertragen
            'NewBitmap.SetResolution(Bild.HorizontalResolution, Bild.VerticalResolution)
     
     
     
            'Graphicsobjekt von NewBitmap erstellen
            Dim NewGraphics As Graphics = Graphics.FromImage(NewBitmap)
     
            'NewBitmap auf NewGraphics zeichnen
            NewGraphics.DrawImage(image, New Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel, _
            imageAttributes)
     
     
            'Ressource freigeben
            NewGraphics.Dispose()
            imageAttributes.Dispose()
     
            farbpic = NewBitmap
     
            Me.PictureBox1.Image = farbpic
            Me.PictureBox1.Refresh()
     
        End Sub
     
     
     Private Sub TrackBar1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrackBar_Red.Scroll
                     Bildfarbe()
        End Sub

    Hat jemand eine Idee wie ich dies realisieren könnte? Ich hab echt nichts brauchbares gefunden. bzw nichts was mir weiterhelfen konnte.

    Wer mehr Infos braucht, einfach melden!!

    PS: Bitte eine ausführliche Erklärung, da ich erst seit zwei Monaten VB programmiere sind meine Kenntnisse noch beschrenkt .
     

  2. #2
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Hallo Nightking,

    das Problem ist rein mathematischer Natur. Da es sich hier um eine Farbmatrix handelt, werden die einzelnen Farbwerte auf relativ kompliziertem Wege mit der Matrix multipliziert. Da der ursprüngliche Grünwert 0 beträgt, kann er per Multiplikation nicht verändert werden. Die Farbmatrix ist also dafür nicht geeignet (zumindest nicht, soweit mir bekannt ist).

    Die Alternative wäre, den Grünwert über das BitmapData-Objekt von Hand einzutragen und das Bild anschließend wieder per Farbmatrix zu manipulieren.

    Vielleicht kennt noch jemand eine Alternative?

    Gruß
    PhoenixLoe
     

  3. #3
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    Hallo Nightking,

    ich habe nochmal darüber nachgedacht. Eigentlich ist es doch möglich, einen Null-Wert zu manipulieren, da es sich ja um eine 5x5-Matrix handelt. Das Stichwort lautet Verschiebungsmatrix. Eine Lösung Deines Problems wäre, zwei Matrizen zu verwenden. Die erste Matrix verschiebt den Grünwert oder einen entsprechenden anderen Wert auf die maximale Itensität, während die zweite Matrix diesen Wert wieder abdunkelt.

    Hier mal ein Beispiel für eine Translationsmatrix:

    Code :
    1
    2
    3
    4
    5
    
    1 0 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0
    r g b a 1
    Die Werte r, g, b und a werden entsprechend auf Deinen Farbwert aufaddiert.
    Anschließend kannst Du wie gewohnt die Matrix zur Manipulation des Grünwertes verwenden.

    OK, ich hoffe, dass das dieses Mal stimmt, was ich hier erzähle .

    Vielleicht suchst Du in der MSDN auch mal nach GDI+ und ColorMatrix. Da gab's glaub ich sogar einen Artikel über die Möglichkeiten der ColorMatrix.

    Gruß
    PhoenixLoe
     

  4. #4
    Nightking Nightking ist offline Rookie
    Registriert seit
    Feb 2007
    Beiträge
    6
    Danke Ich schau es mir morgen mal an.
    Sobald ichs gelöst hab schreib ichs hier rein !


    mfg Nightking
    Geändert von Nightking (18.09.08 um 16:12 Uhr)
     

Ähnliche Themen

  1. BIld einfärben
    Von nex_m im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 3
    Letzter Beitrag: 17.03.09, 18:16
  2. Bild einfärben
    Von kcyberbob im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 21.10.08, 20:17
  3. Bild in HKS-51k einfärben
    Von eggrafx im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 07.08.06, 14:48
  4. Bild einfärben
    Von AlexSchur im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 19.05.05, 17:50
  5. Bild einfärben
    Von Dark_Fighter im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 13.10.04, 00:51