Scrivere su PictureBox un testo alto un tot di pixel

di il
4 risposte

Scrivere su PictureBox un testo alto un tot di pixel

Ciao a tutti,
oggi ho un problema con la grafica.

Ho una picturebox che deve occupare un certo spazio in base alla risoluzione dello schermo poichè devo adattare tutto il form in base alla risoluzione.
Supponiamo di avere una schermo di 1920x1080 e che la mia picturebox deve occupare un decimo della larghezza.
Faccio e miei calcoli e mi trovo che devo fare la picturebox di 192x108 pixel
Ora devo scrivere del testo dentro alla picturebox (solo numeri) e questo testo deve occupare il 20% in altezza della picturebox, per cui mi dovrò trovare il testo alto (circa) 22 pixel.
Come faccio a sapere la grandezza del font che devo utilizzare ??

Ho visto che usando Arial 22 bold viene esattamente un pixel in meno, ma mi sembra strano che l'altezza del font corrisponda esattamente ai pixel utilizzati, per cui pensavo di usare MeasureString

ho provato quindi

        gr = PictureBox1.CreateGraphics
        gr.PageUnit = GraphicsUnit.Pixel
        Dim hh = gr.MeasureString("1234567890", New Font("Arial", 22, FontStyle.Bold)).Height


Ma mi dice hh = 36,4 e non so cosa intenda, eppure l'ho settato in Pixel
C'entra qualcosa il DPI dello schermo o qualcosa del genere ??
Mi ricordo che in VB6 c'era un fattore 15 tra pixel e point, anche qui devo fare qualche calcolo ???

Grazie mille
Sergio

Edit: ho anche provato ad usare TextRenderer.MeasureText ma cambia di poco, mi dice altezza = 35

4 Risposte

  • Re: Scrivere su PictureBox un testo alto un tot di pixel

    14/07/2024 - SirJo ha scritto:


    Ma mi dice hh = 36,4 e non so cosa intenda, eppure l'ho settato in Pixel

    Parrebbe trattarsi dell'altezza in pixel del testo prodotto con quel font.

    Non capisco qual è il tuo dubbio… :|

  • Re: Scrivere su PictureBox un testo alto un tot di pixel

    Mi dice 36,4 ma in realtà facendo uno screenshot e controllando il font è alto 22 pixel

    Comunque ho risolto, se devo stampare un testo alto 22 pixel basta fare

    DrawString("testo da stampare", New Font("Arial", 22, FontStyle.Bold, GraphicsUnit.Pixel), ..........
  • Re: Scrivere su PictureBox un testo alto un tot di pixel

    Anziché calcolare l'altezza del font, utilizza la proprietà FontHeight.

    Per la larghezza, se fai molti calcoli, ti conviene misurare al caricamento o al cambio del font e salvare in una variabile.

    Per il resto, utilizza il metodo proposto da SirJo.

  • Re: Scrivere su PictureBox un testo alto un tot di pixel

    Buongiorno, é il mio primo messaggio, un saluto a tutto il Forum.

    Bisogna convertire Size in pixel in questo modo:

    'https://learn.microsoft.com/en-us/dotnet/desktop/winforms/advanced/how-to-obtain-font-metrics?view=netframeworkdesktop-4.8

    Using g As Graphics = Graphics.FromImage(Textbmp)
           Dim fontWidth = Label1.Font.Size   ' Returns em-size In points--Not pixels
           Dim fontPixels = (fontWidth * g.DpiX) / 72 'grandezza espressa in pixels
           Dim Newgr = Convert.ToSingle((fontPixels + 10) * 72 / g.DpiX) 'più 10 pixel in points
    End Using
    
Devi accedere o registrarti per scrivere nel forum
4 risposte