C# i renderowanie napisu na zdjęciu zawsze na tej samej wysokości.

Odpowiedz Nowy wątek
2019-11-06 18:46
0

Witajcie, to mój pierwszy wpis. Piszę w C# hobbystycznie, w wolnym czasie po ciężkim dniu pracy by móc się wyluzować. Nie jestem jakimś specjalistą a większośc mojej wiedzy z zakresu programowania opieram na przykładach znalezionych w necie czy jakiś kursach na YT.

Do rzeczy, piszę programik który po załadowaniu listy nazw, generuje na medalu Imię, po czym zapisuje je do png.
Wszystko szło dobrze do czasu gdy zacząłem generować tekst, na początek zacząłem skalować tekst w taki sposób by w zależności od długości imienia,
zawsze zmieścił się w danej szerokości.

Problem pojawił się z ustaleniem stałej wysokości gdyż dłuższe imiona generowane są mniejszą czcionkom przez co znacznie uciekają w górę :( pozycja napisu określana jest od lewego, górnego pixela.

Czy idzie określić wysokość od lewego dolnego, a jeśli nie, to czy ktoś ma jakiś pomysł jak zrobić by napis był zawsze na tej samej wysokości ?

Poniżej przesyłam część kodu który odpowiada za generowanie napisu. (Z góry proszę o nie wieszanie na mnie psów za jakość kodu gdyż jak napisałem, piszę czysto hobbistycznie i nie śmie nazywać się programistą :))

            string firstText = "Iza";
            PointF firstLocation = new PointF(120f, 125f);
            string imageFilePath = @"E:/bombka1.png";
            Bitmap bitmap = (Bitmap)Image.FromFile(imageFilePath);//load the image file

            using (Graphics graphics = Graphics.FromImage(bitmap))
            {

                int wid = 180;
                int hgt = 100;
                int best_size = 200;
                for (int i = 1; i <= 100; i++)
                {
                    using (Font test_font = new Font("Arial", i))
                    {
                        SizeF text_size = graphics.MeasureString(firstText, test_font);
                        if ((text_size.Width > wid) ||
                            (text_size.Height > hgt))
                        {
                            best_size = i - 1;
                            break;
                        }
                    }
                }

                using (Font arialFont = new Font("Arial", best_size))
                {

                    graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
                    var Height = graphics.MeasureString(firstText, arialFont).Height;
                    graphics.DrawString(firstText, arialFont, Brushes.White, new PointF(120f, 140f));

                }

Będę wdzięczny za wszelką pomoc :)

Pozostało 580 znaków

2019-11-06 19:15
0

Pierwsze co mi do głowy przyszło do wziąć wielkość fonta w pixelach i odjąć/dodać (nigdy nie pamiętam w którą stronę) od "lewego górnego pixela" aby uzyskać lewy dolny.
How to: Obtain Font Metrics

edytowany 1x, ostatnio: AdamWox, 2019-11-06 19:15

Pozostało 580 znaków

2019-11-06 19:17
0

Robiłem tak ale coś nie działa :( musi istniec inny sposób ... Chyba ze cos zle robie :/

edytowany 1x, ostatnio: Dar Szy, 2019-11-06 21:11

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0