Как преобразовать размер строки в дюймах в C # - PullRequest
4 голосов
/ 05 июля 2011

Я хочу знать размер печати строки в дюймах.то есть какова будет длина (и ширина) строки «Test String» при печати на бумаге.Я могу получить длину в пикселях, используя объект Graphics и метод MeasureString.Но не знаю, как конвертировать пиксели в дюймы на бумаге.

Я проверил этот ТАК вопрос, но не могу найти решение.

Ответы [ 3 ]

4 голосов
/ 05 июля 2011

Разрешение цифровой графики - это размеры в пикселях . Размер печатного изображения зависит от настроек принтера .

  • Если вы напечатаете изображение 300 x 300 pixels при 300dpi на принтере, картинка становится 1 x 1 inch. (300/300)

  • Если вы печатаете изображение 300 x 300 pixels при 10dpi на принтере, картинка становится 30 x 30 дюйм. (300/10)

  • Если вы печатаете изображение 300 x 300 pixels при 1000dpi на принтере, картинка становится 0,3 x 0,3 inch. (300/1000)

Однако точный размер зависит от точности принтера (подача бумаги, сервопривод головки принтера и т. Д.)

Здесь можно найти отличную ссылку: DPI не имеет никакого отношения к качеству цифрового изображения!.

Точка на дюйм дисплея НИЧЕГО не имеет с этим

0 голосов
/ 10 июля 2014

Я знаю, что это старый вопрос, но квази-решение для него.Я проверял свое решение несколько раз, и оно кажется точным, но не точным.Основа этого кода взята непосредственно из примера MSDN и этого ответа для SO, единственное, что я делаю по-другому - это изменение единиц измерения от точек до дюймов.

Графика MSDN.MeasureString ()

private float GetTextWidth(string fontFace, float fontSize, string text)
{
    SizeF size = new SizeF();

    Font font = new Font(fontFace, fontSize);

    //Using a Bitmap object for frame of reference in order to get to a Graphics object
    using (Bitmap b = new Bitmap(1, 1))
    {
        //Graphics object allows string measurement
        using (Graphics g = Graphics.FromImage(b))
        {
            //change the units to inches
            g.PageUnit = GraphicsUnit.Inch;

            //Perform the measurement
            size = g.MeasureString(text, font);
        }
    }

    //Print to console if you want 
    //Console.WriteLine(size.Width);

    return size.Width;
}

Я проверил это со следующими входами: («Arial», 10, «Страница 1 из 1»), и я получил 0,777972 дюйма

Если вы прочитаете примечания по ссылке MSDN выше, то увидите, что на этом рисунке есть немного дополнительного пространства.Вы должны знать, что это происходит:

Метод MeasureString предназначен для использования с отдельными строками и включает в себя небольшой объем дополнительного пространства до и после строки, что позволяет использовать нависающие глифы.

Когда я измерил это на кусочке бумаги от начала до конца, я получил около 0,625, то есть разница 0,152972, что, по сути, составляет ~ 20% заполнения.Я предполагаю, что он распределяется по обеим сторонам равномерно.

Также будьте осторожны с тем, какие шрифты вы используете - например, Helvetica не является поддерживаемым шрифтом по умолчанию, поэтому объект Font по умолчанию будет Arial, если он может 'не найди свой шрифт.

0 голосов
/ 05 июля 2011

Это невозможно, если вы не знаете и размер принтера и размер дисплея в жестких числах.

Скажем, вы печатаете раздаточный материал на весь экран. На 30-дюймовом мониторе 1 пиксель может быть размером 1 единица на бумаге. Но на 7-дюймовом нетбуке размер пикселя на бумаге составит 2 единицы, что вдвое больше, хотя на электронном дисплее они равны одному пикселю.

Проще говоря, это измерение невозможно, если вы не работаете с чем-то фиксированным, например, с размером экрана iPhone (который хорошо известен) или вашим собственным оборудованием, размер экрана которого вы точно измеряете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...