Verpixelter Rand verschwinden lassen?

  • VB.NET

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

    Verpixelter Rand verschwinden lassen?

    Hallo liebes Forum,

    Leider habe ich (man glaubt's kaum) ein kleines Problemchen. Und Zwar folgendes: Der Benutzer gibt eine Bild-URL ein, worauf sich jenes Bild herunterlädt.
    Bei diesem Bild sollten alle Pixel, welche Im Rot- Grün- oder Blauwert (RGB) zwischen 250 und 254 liegen, auf reines Weiss (also 255) korrigiert werden.
    Damit könnte man, wenn ich mich nicht täuscht, dem Verpixelten, fast-weissen Rand (siehe Anhang) vorbeugen, da nur reines Weiss transparent wird.
    Der angehängte Screenshot zeigt eine Form (product1), in welche das "korriegierte" Bild als BackgroundImage zugewiesen würde. (Transparenz via TransparancyKey)

    Doch leider verschwindet der Rand nicht und man findet noch jede Menge Pixel, die eigendlich hätten angepasst werden müssen. (z. B. 250,255,255).

    Hier mein bisheriger Code:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
    2. My.Computer.Network.DownloadFile(TextBox1.Text, Application.StartupPath & "/product1.jpg") 'download image product1.Show() 'Form zeigen
    3. Dim imgTemp As Image imgTemp = Image.FromFile("product1.jpg")
    4. Dim bmpTemp As New Bitmap(imgTemp.Width, imgTemp.Height, Imaging.PixelFormat.Format32bppArgb) Using gfx As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmpTemp) gfx.DrawImage(imgTemp, 0, 0) End Using
    5. Dim oColor As System.Drawing.Color Dim bRed As Byte Dim bGreen As Byte Dim bBlue As Byte
    6. For i = 0 To bmpTemp.Height - 1 For j = 0 To bmpTemp.Width - 1
    7. ' get color oColor = bmpTemp.GetPixel(j, i)
    8. bRed = oColor.R bGreen = oColor.G bBlue = oColor.B
    9. If bRed < 255 And bRed > 250 Then If bGreen < 255 And bGreen > 250 Then If bBlue < 255 And bBlue > 250 Then
    10. Console.WriteLine("R:" & CStr(bRed) & " G:" & CStr(bGreen) & " B:" & CStr(bBlue)) 'gefundene Pixel ausgeben
    11. bmpTemp.SetPixel(j, i, Color.White) End If End If End If
    12. Next Next
    13. product1.BackgroundImage = bmpTemp 'modifiziertes image als Hintergrund setzen
    14. Me.Hide()
    15. End Sub



    Ich wüsste wirklich nicht, wo der Fehler liegt. ?(

    Über Antworten Würde ich mich sehr freuen.

    Gruss
    Bilder
    • anhang.PNG

      117,7 kB, 392×391, 138 mal angesehen
    Umfangreicher Converter im Browser: CloudConvert
    Temporäre e-Mail: temp-mail
    Text-Übersetzter: DeepL
    Kostenloser Webspace: bplaced
    probiere das mal :

    VB.NET-Quellcode

    1. My.Computer.Network.DownloadFile(TextBox1.Text, Application.StartupPath & "/product1.jpg")
    2. product1.Show()
    3. Dim imgTemp As Image = Image.FromFile("product1.jpg")
    4. Dim bmpTemp As New Bitmap(imgTemp.Width, imgTemp.Height, Imaging.PixelFormat.Format32bppArgb)
    5. Using gfx As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmpTemp)
    6. gfx.DrawImage(imgTemp, 0, 0)
    7. End Using
    8. Dim oColor As System.Drawing.Color
    9. Dim bRed As Byte
    10. Dim bGreen As Byte
    11. Dim bBlue As Byte
    12. For x = 0 To bmpTemp.Width - 1
    13. For y = 0 To bmpTemp.Height - 1
    14. ' get color
    15. oColor = bmpTemp.GetPixel(x, y)
    16. bRed = oColor.R
    17. bGreen = oColor.G
    18. bBlue = oColor.B
    19. If bRed <= 255 And bRed >= 250 Then
    20. If bGreen <= 255 And bGreen >= 250 Then
    21. If bBlue <= 255 And bBlue >= 250 Then
    22. Console.WriteLine("R:" & CStr(bRed) & " G:" & CStr(bGreen) & " B:" & CStr(bBlue)) 'gefundene Pixel ausgeben
    23. bmpTemp.SetPixel(x, y, Color.White)
    24. End If
    25. End If
    26. End If
    27. Next
    28. Next
    29. product1.BackgroundImage = bmpTemp
    30. Me.Hide()

    glaube du hast bei der if einen Fehler gemacht.
    so dein if Fehler ist das z.b hier

    VB.NET-Quellcode

    1. If Int > 5 And Int < 10 Then
    2. End If

    hier wird der zwischen 6 und 9 genommen und nicht 10 oder 5 mit eingeschlossen richtig müsste das so aussehen :

    VB.NET-Quellcode

    1. If Int => 5 And Int =< 10 Then
    2. End If


    Ps und bitte formatiere den Text das nächste mal das ist echt ätzend das immer selbst zu machen :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise
    Hallo.

    Danke für die superschnelle Antwort :thumbsup:

    Mir wurde gerade bewusst, dass ich 255 im Code geschrieben habe. Es sollte eigendlich heissen: If bRed <= 254 And bRed >= 250 Then usw...

    Leider sieht das Ergebniss immernoch gleich aus, als würde er das Original-Bild als Hintergrund zuweisen und nicht das veränderte. Er gibt aber die anzupassenden Pixel im Output aus (Anhang).

    Hat jemand noch eine Idee?


    @BlackNetworkBit: Entschuldigung, das mit dem Formatieren muss ich nochmals üben, bin erst seit heute dabei :)

    Gruss CodeRed
    Bilder
    • output.PNG

      13,33 kB, 346×563, 134 mal angesehen
    Umfangreicher Converter im Browser: CloudConvert
    Temporäre e-Mail: temp-mail
    Text-Übersetzter: DeepL
    Kostenloser Webspace: bplaced
    Probiere mal das einzusetzen :
    //EDIT sorry war bulshit :D :D
    kannst du mal das pic hochladen zum testen ?
    ich würde einfach mal sagen das am Rand eine vollkommen andere Farbenreich ist :)
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise

    CodeRed schrieb:

    VB.NET-Quellcode

    1. If bBlue < 255 And bBlue > 250 Then
    Mach da mal ein AndAlso draus, das ist etwas performanter.
    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!
    Jup das Problem ist der Schatten da müsstest du jetzt aber kucken welcher Farbbereich das ist und den dann auch einfach in Weiß ändern.
    (bin grade zu faul und wir wollen dir ja auch nicht den spaß nehmen :D :D )
    MFG 0x426c61636b4e6574776f726b426974
    InOffical VB-Paradise IRC-Server
    webchat.freenode.net/
    Channel : ##vbparadise