Вам известно, что BitsPerPixel
описывает глубину цвета (количество бит памяти, которое используется для описания цвета пикселя) и не имеет ничего общего с разрешением?
Я полагаю, что вы хотите нарисовать текст в размере, соответствующем разрешению, что можно сделать, обратившись к DpiX
и DpiY
свойства объекта Graphics
.
Обновление
Я не уверен, нужно ли вам включать Dpi в расчет для этого. Все, что вам нужно сделать, это создать прямоугольник, который определяет желаемый размер вашего текста, а затем вычислить правильный размер шрифта, чтобы текст поместился внутри прямоугольника. Следующее делает это (но максимизирует размер текста как по вертикали, так и по горизонтали). Это может дать вам несколько советов для решения вашей проблемы:
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);
}
}
И если вы хотите напечатать текст с заданным размером точки, вам не нужно заниматься измерением; просто установите размер шрифта:
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);
}