BitsPerPixel
は色深度 (ピクセルの色を表すために使用されるメモリ ビットの数) を表し、解像度とは何の関係もないことを認識していますか?
あなたがしたいことは、解像度に関連するサイズでテキストを描画することだと思います。これは、オブジェクトのDpiX
およびDpiY
プロパティを参照することで実行できます。Graphics
アップデート
この計算に Dpi を含める必要があるかどうかはわかりません。必要なのは、テキストの目的のサイズを定義する Rectangle を作成し、正しいフォント サイズを計算して、テキストが四角形内に収まるようにすることだけです。以下はそれを行います(ただし、垂直方向と水平方向の両方のテキストサイズを最大化します)。問題を解決するためのヒントが得られる場合があります。
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);
}