Vous savez que BitsPerPixel
décrit la profondeur de couleur (le nombre de bits de mémoire utilisés pour décrire la couleur d'un pixel) et n'a rien à voir avec la résolution?
Je suppose que ce que vous voulez faire est de dessiner le texte dans une taille qui est liée à la résolution, que vous pouvez faire en se référant aux DpiX
et DpiY
propriétés de l'objet Graphics
.
Mise à jour
Je ne sais pas si yo besoin d'apporter Dpi dans le calcul pour cela. Tout ce que vous devez faire est de créer un rectangle qui définit la taille désirée de votre texte, puis de calculer la taille de police correcte pour que le texte s'insère dans le rectangle. Ce qui suit fait cela (mais maximise la taille du texte à la fois verticale et horizontale direction). Il peut vous donner quelques conseils pour résoudre votre problème:
Bitmap bm = new Bitmap(50, 50);
using (Font font = new Font(fontName, 10, GraphicsUnit.Point))
using (Graphics g = Graphics.FromImage(bm))
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Near
};
Rectangle rect = new Rectangle(0, 0, bm.Width, bm.Height);
// measure how large the text is on the Graphics object with the current font size
SizeF s = g.MeasureString(text, font);
// calculate how to scale the font to make the text fit
float fontScale = Math.Max(s.Width/rect.Width, s.Height/rect.Height);
using (Font fontForDrawing = new Font(font.FontFamily, font.SizeInPoints/fontScale, GraphicsUnit.Point))
{
g.DrawString(text, fontForDrawing, Brushes.Black, rect, stringFormat);
}
}
Et si vous voulez imprimer le texte avec une taille de point donné, vous n'avez pas besoin d'aller sur mesure; juste définir la taille de la police:
Bitmap bm = new Bitmap(20, 20);
using (Font font = new Font(fontName, 6, GraphicsUnit.Point))
using (Graphics g = Graphics.FromImage(bm))
{
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
StringFormat stringFormat = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Near
};
Rectangle rect = new Rectangle(0, 0, bm.Width, bm.Height);
g.DrawString(text, font, Brushes.Black, rect, stringFormat);
}
Pourquoi utilisez-vous BitsPerPixel? Cela, je crois est pour la profondeur de couleur? –
Oui ... http://msdn.microsoft.com/fr-fr/library/system.windows.forms.screen.bitsperpixel.aspx –