Ihnen ist bekannt, dass BitsPerPixel
beschreibt die Farbtiefe (die Anzahl der Speicherbits, die zur Beschreibung der Farbe eines Pixels verwendet werden), und hat nichts mit der Auflösung zu tun?
Ich gehe davon aus, dass, was Sie tun möchten, den Text in einer Größe zu zeichnen ist, die auf die Auflösung zusammenhängt, die Sie unter Bezugnahme auf die DpiX
und DpiY
Eigenschaften des Graphics
Objekt tun kann.
aktualisieren
Ich bin nicht sicher, ob yo Dpi in die Berechnung für diese mitbringen müssen. Alles, was Sie tun müssen, ist ein Rechteck zu erstellen, das die gewünschte Größe Ihres Textes definiert, und dann die korrekte Schriftgröße zu berechnen, damit der Text in das Rechteck passt. Folgendes tut das (maximiert aber die Textgröße sowohl in vertikaler als auch in horizontaler Richtung). Es könnte Ihnen einige Hinweise Ihr Problem zu lösen:
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);
}
}
Und wenn Sie den Text mit einer bestimmten Punktgröße ausdrucken möchten, Sie brauchen sich nicht um die Messung zu gehen; nur die Schriftgröße einstellen:
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);
}
Warum verwenden Sie BitsPerPixel? Das glaube ich ist für Farbtiefe? –
Ja ... http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.beitsperpixel.aspx –