Изображение в формате WindowsForm!= TextRenderer.DrawText()

Как я разместил здесь, мне удалось отобразить некоторые специальные шрифты на моем 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:

WindowsForm with Label VS TextRenderer Image (same string and the font)

Как мы видим, первый "символ" (если мы можем сказать "символ" для этого примера) как-то не то же самое. Теперь позвольте мне изменить мою строку в моей функции TextRenderer Image на "TTEST". Сравните "TEST" на WinForm с "TTEST" на TextRenderer Изображение:

enter image description here

Выглядит интересно? Итак, 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;
}

Как мы видим, тот же шрифт с той же строкой. Я не понимаю...

Ответ 1

Вы отправили неправильный код, это версия растрового изображения. Похоже, UEST для меня, заметная ошибка "один за другим".

Это не единственная проблема, даже если вы исправите это, она все еще не является допустимым штрих-кодом Code128. Вам также нужен символ "Старт", "Проверить и остановить", как описано в этой статье Wikipedia. Возможно, вы близки к неизбежному выводу "купить, не строить". Поиск элементов управления, которые генерируют штрих-коды, не является сложным и дорогостоящим.