Как я разместил здесь, мне удалось отобразить некоторые специальные шрифты на моем WindowsForm , но. Мне не удалось сохранить этот шрифт как картина. Проблема заключалась в том, что Graphic.DrawString()
не может отображать все или специальные шрифты. WindowsForm использует TextRenderer
и его новый (добавленный с 2.0), поэтому WindowsForm смог отобразить эти шрифты.
Fine. Теперь я сижу здесь и пытаюсь сделать то же самое с TextRenderer.DrawText()
- я должен сказать, что мое выходное изображение теперь намного лучше , но все еще не то же самое, что и в WindowsForm. Давайте посмотрим на мой код:
Bitmap Bit = new Bitmap(500, 200);
Graphics g = Graphics.FromImage(Bit);
string s = "TEST";
g.Clear(Color.White);
TextRenderer.DrawText(g, s, new Font("Code 128", 72), new Point(20, 20), Color.Black, Color.White);
Bit.Save(@"C:\myFolder\test.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
Bit.Dispose();
(код 128 - это специальный шрифт, если вы действительно хотите узнать больше об этом только по ссылке ниже по ссылке ниже)
Итак, это работает, я получаю свой образ, отлично. Теперь я добавляю ту же строку с тем же шрифтом в тот же проект VS, что и Label, на моем WindowsForm. И есть какая-то разница. Разница заключается в том, что изображение, созданное с помощью TextRenderer
, всегда было другим персонажем в первой позиции. Все остальное в порядке! Я не понимаю. Давайте посмотрим WinForm VS Image:
Как мы видим, первый "символ" (если мы можем сказать "символ" для этого примера) как-то не то же самое. Теперь позвольте мне изменить мою строку в моей функции TextRenderer Image на "TTEST". Сравните "TEST" на WinForm с "TTEST" на TextRenderer Изображение:
Выглядит интересно? Итак, TextRenderer.DrawText()
+ special font = first char является странным. Но почему? И как это исправить? Какие-либо предложения? Спасибо!
Изменить: если это помогает, я могу опубликовать код WindowsForm
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Code 128", 72F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2)));
this.label1.Location = new System.Drawing.Point(30, 41);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(144, 94);
this.label1.TabIndex = 0;
this.label1.Text = "TEST";
this.label1.Click += new System.EventHandler(this.label1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
}
Как мы видим, тот же шрифт с той же строкой. Я не понимаю...