Alphakomponente(n) eines Bildes

  • VB.NET
  • .NET (FX) 4.0

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Alphakomponente(n) eines Bildes

    Hallo liebes Forum :D

    Ich habe eine Frage zu folgendem Fall:

    Ich lasse mir zunächst einmal von meinem Bild den Alpha-Wert folgender Position ausgeben; 1x1:

    VB.NET-Quellcode

    1. Dim Bild As New Bitmap("C:\Test.png")
    2. Dim AWert As Integer = Bild.GetPixel(1, 1).A
    3. Dim BBreite as Integer = Bild.Width
    4. Dim BHoehe as Integer = Bild.Height
    5. MsgBox(Awert.ToString)


    Super, dachte ich mir. Dann geh ich nun so vor, dass ich mir jedes Pixel einzeln auswerte!
    X und Y, was soll da schon schwierig sein.. Also ratter ich mal von X runter und lass mir alle Y Werte ausgeben, schon hab ich von jeder Zeile meine Alpha-Werte..!

    Aber:

    VB.NET-Quellcode

    1. For x As Integer = 1 To BBreite
    2. For y As Integer = 1 To BHoehe
    3. MsgBox(Bild.GetPixel(x, y).A.ToString)
    4. Next
    5. Next


    Irgendwie bekomm ich nichts und die MsgBox zeigt mir nur "System.Drawing.Color[,]" an.

    Was mach ich denn Falsch? ?(

    Grüße
    Option Strict On!

    Drahuverar schrieb:

    "System.Drawing.Color[,]"
    Bei mir nich. Mach es so und öffne im Studio das Output-Fenster:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Bild As New Bitmap(10, 10) ' hier Deine Bitmap
    3. For x As Integer = 0 To Bild.Width - 1
    4. For y As Integer = 0 To Bild.Height - 1
    5. Debug.WriteLine(Bild.GetPixel(x, y).A.ToString)
    6. Next
    7. Next
    8. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ohje............
    Lag wohl daran das ich Bockmist gebaut habe.

    Danke dir.

    Eine Frage zu Alpha;
    Ich habe ein Bild genommen mit wirklich sehr vielen Farbpixeln und auch dementsprechend unterschiedlichen Farbhelligkeiten.

    Jetzt wollte ich mir mal alles in eine TXT reinschreiben, also nur Alpha:

    VB.NET-Quellcode

    1. Using writer As StreamWriter = New StreamWriter("C:\BLAH.txt")
    2. 'schleife...
    3. writer.Write(Bild.GetPixel(x, y).A.ToString & ", ")
    4. End Using


    Allerdings kommt nur 255 raus, pro Pixel "255, " ---> und nur 255.
    Also "255, " * X * Y pixel!

    Interpretiere ich Alpha falsch?
    Oder ist das nur ein Wahnsinns Zufall?

    Grüße
    Option Strict On!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Drahuverar“ ()

    Wenn du die Helligkeit von den Pixeln bekommen möchtest, dann solltest du Color.GetBrightness() nutzen.
    Eventuell wäre aber auch noch zu empfehlen, der Pefformance wegen LockBits anstatt GetPixel zu nutzen.
    Vielen Dank.

    Ich dachte immer Alpha sei ein Wert für die Helligkeit, nicht die Transparenz...
    @nafets -> LockBits? Was ist denn da genau der Unterschied?

    Habe mir nun mal alle Werte, die ich über "Color" bekommen kann, anzeigen lassen,
    hier habe ich ja u.a. Werte wie Sättigung (Color.GetSaturation), Helligkeit (Color.GetBrightness) und Farbton (Color.GetHue).
    Ziemlich interessant, muss ich sagen.
    Ich denke, ich werde mir hierzu mal ein kleines Projekt einfallen lassen. :D

    Grüße,
    Drahuverar
    Option Strict On!
    Mit

    Drahuverar schrieb:

    LockBits
    greifst Du auf ein Array mit den linearen Pixelinformationen zu, die permanente Konvertierung der Pixelinformation zu einem Color-Objekt entfällt.
    Das ganze geht rasend schneller.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!