2010-07-13 15 views
5

Realizzo il testo su un'immagine utilizzando la classe System.Drawing.Graphics e il metodo DrawString().Modifica della crenatura in System.Drawing.Graphics.DrawString()

Ho bisogno di generare il testo per questa immagine in un modo molto specifico in modo che esattamente - pixel per pixel - corrisponda a un'immagine esistente.

Il problema è che il testo generato da DrawString() ha una diversa crenatura del testo nell'immagine esistente (la mia ipotesi migliore è di circa 0,5-1 pixel per lettera).

Qualcuno può dirmi se è possibile modificare la crenatura durante l'utilizzo di questo spazio dei nomi e del metodo?

Inoltre, si tratta di un carattere personalizzato che stiamo utilizzando e abbiamo dovuto convertirlo da open-type (che l'immagine sorgente utilizzata) a true-type. Potrebbe il kerning essere stato modificato in questa fase?

risposta

3

http://blog.stevex.net/rendering-text-using-the-net-framework/

Il problema di queste è che la crenatura testo viene misurato in modo diverso - più esattamente - ma in un modo che è spesso incompatibile con il modo in cui gli sviluppatori di applicazioni desidera utilizzare queste funzioni.

La soluzione:

ExtTextOut non era abbastanza intelligente per fare questo genere di crenatura, in modo da non avere questo problema. Sfortunatamente il framework .NET non ha alcuna funzione di disegno del testo su cui si può ricorrere, quindi l'unico modo per ottenere il vecchio comportamento è attraverso P/Invoke alla funzione ExtTextOut in GDI.

Il collegamento ha qualche codice di esempio .. spero che sia d'aiuto!