Größe eines GraphicsPath umrechenen

  • C#

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Größe eines GraphicsPath umrechenen

    Guten Tag,
    ich versuche im Moment die Größe eines GraphicsPath an ein Rectangle anzupassen. Leider sind meine Ergebnisse bislang mehr schlecht als recht. Und ich komm nicht drauf wie ich das am besten umsetzen kann.
    Bislang versuche ich das Prozentual umzurechnen. Allerdings ohne erfolg, mein Ergebniss sieht so aus


    Spoiler anzeigen

    GraphicsPath

    C#-Quellcode

    1. private Bitmap CreateMarquee(RectangleF boundingRect)
    2. {
    3. Bitmap bmp = new Bitmap((int)boundingRect.Width, (int)boundingRect.Height);
    4. using (Graphics g = Graphics.FromImage(bmp)) {
    5. g.Clear(Color.Aquamarine);
    6. using (GraphicsPath gp = new GraphicsPath()) {
    7. gp.AddLines(new PointF[] {
    8. new PointF(CalculateSize(boundingRect.Width,10),0),
    9. new PointF(CalculateSize(boundingRect.Width,20f), CalculateSize(boundingRect.Height,2f)),
    10. new PointF(0,CalculateSize(boundingRect.Height,4f)),
    11. new PointF(CalculateSize(boundingRect.Width,15f),CalculateSize(boundingRect.Height,7f)),
    12. new PointF(CalculateSize(boundingRect.Width,40f),CalculateSize(boundingRect.Height,7f)),
    13. new PointF(CalculateSize(boundingRect.Width,55),CalculateSize(boundingRect.Height,4)),
    14. new PointF(CalculateSize(boundingRect.Width,35f),CalculateSize(boundingRect.Height,2f)),
    15. new PointF(CalculateSize(boundingRect.Width,45f),0)
    16. });
    17. gp.CloseFigure();
    18. g.SmoothingMode = SmoothingMode.AntiAlias;
    19. LinearGradientBrush brush = new LinearGradientBrush(boundingRect, Color.Black, Color.Black, 0f);
    20. brush.InterpolationColors = CreateColorBlend(Color.Red, Color.Red);
    21. g.FillPath(brush, gp);
    22. }
    23. }
    24. return bmp;
    25. }


    Berechnung

    C#-Quellcode

    1. private float CalculateSize(float maxSize, float percent)
    2. {
    3. return ((maxSize / 100f) * percent);
    4. }



    Wie rechne ich denn das ganze am besten um?
    @Fakiz Kannst Du bitte mal so viel Code posten, dass der Effekt nach Einfügen Deines Codes sofort dargestellt wird?
    Proportional vergrößern kannst Du Dein Bild so:

    C#-Quellcode

    1. private float CalculateSize(float maxSize, float percent)
    2. {
    3. const float factor = 2F; // dies hier
    4. return ((maxSize / 100f) * percent * factor);
    5. }
    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!
    @ErfinderDesRades Jou.
    @Fakiz Du solltest Deine Herangehensweise ändern.
    Berechne die Instanz des GraphicsPath separat in der Klasse und verwende dann diese Instanz mit individueller Größenanpassung, wenn Du sie benötigst, d.h., wenn Du eine in der Größe veränderliche Form befüllen willst, holst Du Dir die aktuelle Größe der Form und rechnest die GP-Instanz für diese Größe und verwendest das skalierte Ergebnis.
    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!
    Danke für die Antworten. Ich werde wie @ErfinderDesRades schon sagte eine Matrix für die skalierung verwenden. Hab dazu gestern abend noch ein ausführliches Tutorial gefunden.

    [Tutorial] GDI+

    Berechne die Instanz des GraphicsPath separat in der Klasse und verwende dann diese Instanz mit individueller Größenanpassung

    So werd ichs machen.