Bild invertieren

C4Dlooser

Erfahrenes Mitglied
Hi,
Ich würde gerne das hier verwenden aber habe keine Ahnung wie das geht bzw. wie ich es verwenden kann.
Ich weiß das ich sehr dumm bin ;-).

Gruß C4Dlooser
 
hi C4Dlooser,
deine Frage ist sehr wage, Wo genau ist denn Dein Problem? Was hast due denn schon probiert? Evtl. Quellcode deiner Versuche vorhanden? Welche Sprache verwendest du? C# oder VB?
Bitte beschreib Dein Problem näher.


Gruß
Col.Balke
 
Das ganze hat sich erledigt ich verwende es zb. so:
Code:
Public Class Form1

    Public Function InvertColors(ByVal Image As Image) As Image
        Dim ImgAttr As New Imaging.ImageAttributes()

        'Standard-ColorMatrix für Invertierung
        Dim ColorMatrix As New Imaging.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}})

        'ColorMatrix an ImageAttribute-Objekt übergeben
        ImgAttr.SetColorMatrix(ColorMatrix)

        'Neue 32bit Bitmap erstellen
        Dim NewBitmap = New Bitmap(Image.Width, Image.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)

        'Resolution (DPI) vom Quellbitmap auf Zielbitmap übertragen
        NewBitmap.SetResolution(Image.HorizontalResolution, Image.VerticalResolution)

        'Graphicsobjekt von NewBitmap erstellen
        Dim NewGraphics As Graphics = Graphics.FromImage(NewBitmap)

        'NewBitmap auf NewGraphics zeichnen
        NewGraphics.DrawImage(Image, New Rectangle(0, 0, NewBitmap.Width, NewBitmap.Height), 0, 0, Image.Width, Image.Height, GraphicsUnit.Pixel, ImgAttr)

        'Ressource freigeben
        NewGraphics.Dispose()
        ImgAttr.Dispose()
        Return NewBitmap
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.Image = InvertColors(PictureBox1.Image)
    End Sub
End Class

allerdings stimmt was in der matrix nicht (bei mir jedenfalls) man muss in den letzten ziffernblock alle nullen zu einsen machen dann funktioniert es:

Code:
Public Class Form1

    Public Function InvertColors(ByVal Image As Image) As Image
        Dim ImgAttr As New Imaging.ImageAttributes()

        'Standard-ColorMatrix für Invertierung
        Dim ColorMatrix As New Imaging.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() {1, 1, 1, 1, 1}})

        'ColorMatrix an ImageAttribute-Objekt übergeben
        ImgAttr.SetColorMatrix(ColorMatrix)

        'Neue 32bit Bitmap erstellen
        Dim NewBitmap = New Bitmap(Image.Width, Image.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)

        'Resolution (DPI) vom Quellbitmap auf Zielbitmap übertragen
        NewBitmap.SetResolution(Image.HorizontalResolution, Image.VerticalResolution)

        'Graphicsobjekt von NewBitmap erstellen
        Dim NewGraphics As Graphics = Graphics.FromImage(NewBitmap)

        'NewBitmap auf NewGraphics zeichnen
        NewGraphics.DrawImage(Image, New Rectangle(0, 0, NewBitmap.Width, NewBitmap.Height), 0, 0, Image.Width, Image.Height, GraphicsUnit.Pixel, ImgAttr)

        'Ressource freigeben
        NewGraphics.Dispose()
        ImgAttr.Dispose()
        Return NewBitmap
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.Image = InvertColors(PictureBox1.Image)
    End Sub
End Class

Gruß C4Dlooser
 

Neue Beiträge

Zurück