Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [Vb.Net]Metodo Drawstring

    Buongiorno a tutti. Volevo chiedere, ma il metodo DrawString lo posso utilizzare solo all'interno dell'evento Paint?
    Io dovrei creare diverse bitmap contenenti ciascuna un carattere nel font deciso dall'utente. Pensavo di usare il metodo drawstring per poi salvare la bitmap. Ma ho notato che il metodo è disponibile solo tramite evento onPaint. Devo per forza aspettare i vari eventi onPaint e visualizzare a video i caratteri? Non esiste un metodo da poter utilizzare dove voglio io?
    -----
    101110101011101111100000
    -----

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ovviamente puoi usare DrawString quando e come vuoi.

    Devi creare un oggetto Graphics per il PictureBox, poi crei l'oggetto Font con gli attributi che ti servono, infine usi DrawString per eseguire il rendering del testo


    codice:
    Dim g As Graphics = picDraw.CreateGraphics
    Dim dFont = New Drawing.Font("Arial", 24, FontStyle.Bold Or FontStyle.Underline, GraphicsUnit.Pixel, 1)
    g.DrawString("Ciao, sono io!", dFont, Brushes.CadetBlue, 20, 50)
    Il punto però è un'altro. Come recita la guida:
    Non è possibile chiamare il metodo DrawString nel gestore eventi Load. Se il form viene ridimensionato o nascosto da un altro form, il contenuto creato non verrà ricreato. Per ridisegnare automaticamente il contenuto è necessario eseguire l'override del metodo OnPaint.


    Ciao

  3. #3
    Perfetto!!!!
    Non riesco a trovare il modo però per ricavare la dimensione del carattere (come altezza ho il font.Height) ma come ricavo la larghezza del carattere? Dinamicamente per ogni carattere intendo.
    -----
    101110101011101111100000
    -----

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da xam85reBanned
    Dinamicamente per ogni carattere intendo.
    Cosa intendi dire?

  5. #5
    Per esempio la 'A' scritta col Carattere "Sans Serif" di dimensione "8" in grassetto, ha come misure del rettangolo circoscritto 10 x 8 (misure date a caso). Per ora mi sono fatto un algoritmino io ma, se esistesse un metodo migliore...
    Codice PHP:
    Function fitChar(ByVal imgChar As BitmapByVal BackColor As Color) As Bitmap
            Dim x 
    As IntegerAs Integer
            Dim xBlank 
    As Integer imgChar.WidthyBlank As Integer imgChar.Height
            Dim Blank 
    As Boolean True
            Dim retBmp 
    As Bitmap
            
    For imgChar.Width 1 To 0 Step -1
                
    For imgChar.Height 1 To 0 Step -1
                    
    If imgChar.GetPixel(xy).BackColor.And imgChar.GetPixel(xy).BackColor.And imgChar.GetPixel(xy).BackColor.And imgChar.GetPixel(xy).BackColor.B Then
                        Blank 
    Blank And True
                    
    Else
                        
    Blank Blank And False
                    End 
    If
                
    Next
                
    If Blank True Then
                    xBlank 
    x
                
    Else
                    Exit For
                
    End If
            
    Next
            Blank 
    True

            
    For imgChar.Height 1 To 0 Step -1
                
    For imgChar.Width 1 To 0 Step -1
                    
    If imgChar.GetPixel(xy).BackColor.And imgChar.GetPixel(xy).BackColor.And imgChar.GetPixel(xy).BackColor.And imgChar.GetPixel(xy).BackColor.B Then
                        Blank 
    Blank And True
                    
    Else
                        
    Blank Blank And False
                    End 
    If
                
    Next
                
    If Blank True Then
                    yBlank 
    y
                
    Else
                    Exit For
                
    End If
            
    Next
            
    If xBlank 0 Then
                xBlank 
    imgChar.Width
            End 
    If
            If 
    yBlank 0 Then
                yBlank 
    imgChar.Height
            End 
    If

            
    retBmp = New Bitmap(xBlankyBlank)
            For 
    0 To xBlank 1
                
    For 0 To yBlank 1
                    retBmp
    .SetPixel(xyimgChar.GetPixel(xy))

                
    Next
            Next
            
    Return retBmp
        End 
    Function 
    per esempio


    Immagine dove stampo : 48 x 48 pixel (scelti per caso)

    Risulta:

    Ma se esistesse un metodo dove possa sapere a priori la dimensione del carattere....
    -----
    101110101011101111100000
    -----

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Non ti seguo...

    codice:
    Ma se esistesse un metodo dove possa sapere a priori la dimensione del carattere....
    Sei tu a scegliere il carattere, quindi ne conosci già la dimensione.

    Forse se dai qualche info in più...

  7. #7
    Non conosco la dimensione in pixel. Per esempio (sparo numeri a caso, non ho tempo di provarli)
    la lettera A font 1 Dimensione 8 occupa un rettangolo di 10x8. La B con lo stesso font occupa 10*12 per esempio. Volevo trovare un modo che mi disse passandogli il carattere, il font (quindi dimensione etc ) mi restituisse la dimensione del carattere (non in punti, ma in pixel) ho provato a ricavarla dalle proprietà del font ma è errata.
    -----
    101110101011101111100000
    -----

  8. #8
    Trovato.
    Measure String
    -----
    101110101011101111100000
    -----

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.