Bitmap zentriert drehen und Größe ermitteln

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    @tron25
    oder:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function AdjustGrayBrightness(ByVal grayValue As Integer, ByVal factor As Double) As Color
    2. ' Sicherstellen, dass der Grauwert gültig ist (0-255)
    3. grayValue = Math.Max(0, Math.Min(255, grayValue))
    4. ' Neuen Wert berechnen
    5. Dim newGray As Integer = CInt(grayValue * factor)
    6. ' Begrenzung auf 0-255, um gültige RGB-Werte zu erhalten
    7. newGray = Math.Max(0, Math.Min(255, newGray))
    8. ' Rückgabe der neuen Farbe Return Color.FromArgb(newGray, newGray, newGray)
    9. End Function
    10. Dim originalGray As Integer = 100 ' Beispiel: Dunkles Grau (RGB 100,100,100)
    11. Dim heller As Color = AdjustGrayBrightness(originalGray, 1.5) ' Aufhellen (Faktor 1.5)
    12. Dim dunkler As Color = AdjustGrayBrightness(originalGray, 0.6) ' Abdunkeln (Faktor 0.6)

    Neu

    Das Drehen von Bildern funktioniert. Allerdings ist mir aufgefallen, das beispielsweise bei einem Winkel von 45 Grad die diagonalen Linien doppelt gezeichnet werden. Ich habe bei den folgenden Zeilen alle verfügbaren Optionen vvergeblich versucht:

    VB.NET-Quellcode

    1. Grafikobjekt.SmoothingMode = SmoothingMode.None
    2. Grafikobjekt.InterpolationMode = InterpolationMode.HighQualityBicubic
    3. Grafikobjekt.PixelOffsetMode = PixelOffsetMode.None

    Beim Drehen werden wohl Pixel, die rechnerisch zwischen zwei liegen durch zwei Pixel mit mittlerer Helligkeit übersetzt. Gibt es eine Option, bei der dieser Effekt nicht auftritt?
    Bilder
    • Screenshot (2).png

      63,76 kB, 1.920×1.200, 4 mal angesehen
    • Screenshot (3).png

      61,21 kB, 1.920×1.200, 4 mal angesehen

    Neu

    tron25 schrieb:

    Gibt es eine Option, bei der dieser Effekt nicht auftritt?
    Du müsstest die numerische Transformation selbst programmieren.
    Grob gesagt:
    Du gehst in 2 Schleifen über die Zielpixel und holst Dir mit den Koordinaten die Information der Herkunftspixel.
    Das wäre dann mathematisch die Rücktransformation, die unterscheidet sich von der Hintransformation nur in Vorzeichen.
    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!

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