我想知道在C# (.NET 4.0)中是否可能创建包含文本的位图,而该文本完全独立于任何Windows配置或设置。
我已经尝试了几周,但并没有真正找到解决方法。为了调查事实,我在VS2010中创建了一个小型控制台应用程序,其中包含以下代码:
它创建了多个PNG文件,每个文件中包含了测试文本以不同的字体大小、位图分辨率和字体大小单位的组合。首先,我在Windows设置为正常字体大小(屏幕分辨率设置为100%)时执行它,第二次运行是在屏幕分辨率设置为125%时进行的。
我的基本期望有两个: 1. 当字体大小使用“像素”作为单位时,Windows分辨率对位图结果没有任何影响。对于相同的字体大小,无论位图的分辨率如何,结果始终相同。 2. 当字体大小使用“点”作为单位,并且显式设置了位图分辨率时,Windows屏幕分辨率设置对位图结果没有任何影响。
但结果并不符合我的期望: 1. 当字体大小使用“像素”作为单位时,Windows分辨率会导致14像素大小的不同结果,但对于10像素、100像素或200像素则没有影响。 2. 当字体大小使用“点”作为单位时,显式设置位图分辨率也没有任何效果。
到目前为止,我还没有找到任何解释。
请问有谁能告诉我如何创建文本位图,使其始终看起来像Windows分辨率设置为100%,即使实际上不是这样吗?
提前感谢您!
我已经尝试了几周,但并没有真正找到解决方法。为了调查事实,我在VS2010中创建了一个小型控制台应用程序,其中包含以下代码:
class Program
{
private const TextFormatFlags DefaultTextFormatFlags = TextFormatFlags.NoPadding | TextFormatFlags.Left | TextFormatFlags.NoPrefix;
private static int[] aPpi = { 72, 96, 192 };
private static bool[] aSetPpi = { false, true };
private static GraphicsUnit[] aGU = { GraphicsUnit.Pixel, GraphicsUnit.Point };
private static int[] aSize = { 10, 14, 100, 200 };
static void Main(string[] args)
{
int idx = 0;
foreach (int ppi in aPpi)
{
foreach (bool b in aSetPpi)
{
foreach (GraphicsUnit gu in aGU)
{
foreach (int size in aSize)
{
idx++;
CreatePic(idx, ppi, b, gu, size);
}
}
}
}
}
private static void CreatePic(int id, int ppi, bool setppi, GraphicsUnit unit, int size)
{
Bitmap bm;
Graphics g;
Font font;
Color txtColor;
Color background;
string fn;
txtColor = Color.Blue;
background = Color.Transparent;
bm = new Bitmap(1000, 1000, PixelFormat.Format32bppArgb);
if (setppi)
{
bm.SetResolution(ppi, ppi);
}
g = Graphics.FromImage(bm);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
g.PageUnit = GraphicsUnit.Pixel;
font = new Font("Roboto Lt", size, FontStyle.Regular, unit);
TextRenderer.DrawText(g, "0T1ÄgÁj", font, new Point(0, 0), txtColor, background, DefaultTextFormatFlags);
font.Dispose();
g.Dispose();
fn = string.Format("p_{0,-5}_{1,-4}_{2,-4}_{3,-4}.png", unit, size, setppi, ppi);
bm.Save(fn, ImageFormat.Png);
bm.Dispose();
}
}
它创建了多个PNG文件,每个文件中包含了测试文本以不同的字体大小、位图分辨率和字体大小单位的组合。首先,我在Windows设置为正常字体大小(屏幕分辨率设置为100%)时执行它,第二次运行是在屏幕分辨率设置为125%时进行的。
我的基本期望有两个: 1. 当字体大小使用“像素”作为单位时,Windows分辨率对位图结果没有任何影响。对于相同的字体大小,无论位图的分辨率如何,结果始终相同。 2. 当字体大小使用“点”作为单位,并且显式设置了位图分辨率时,Windows屏幕分辨率设置对位图结果没有任何影响。
但结果并不符合我的期望: 1. 当字体大小使用“像素”作为单位时,Windows分辨率会导致14像素大小的不同结果,但对于10像素、100像素或200像素则没有影响。 2. 当字体大小使用“点”作为单位时,显式设置位图分辨率也没有任何效果。
到目前为止,我还没有找到任何解释。
请问有谁能告诉我如何创建文本位图,使其始终看起来像Windows分辨率设置为100%,即使实际上不是这样吗?
提前感谢您!