Оказывается, что в инструменте миграции есть что-то, но оно не принесет пользы во время выполнения.Вот что я сделал (если бы жестко закодированное значение в методе расширения было изменено на значение для точек на дюйм, оно также работало бы как преобразователь точек):
1 Twip = 1/1440-ая дюйма.У объекта .NET Graphics
есть методы DpiX
и DpiY
, которые можно использовать для определения количества пикселей в дюйме.Используя эти измерения, я создал следующие методы расширения для Graphics
:
using System.Drawing;
static class Extensions
{
/// <summary>
/// Converts an integer value in twips to the corresponding integer value
/// in pixels on the x-axis.
/// </summary>
/// <param name="source">The Graphics context to use</param>
/// <param name="inTwips">The number of twips to be converted</param>
/// <returns>The number of pixels in that many twips</returns>
public static int ConvertTwipsToXPixels(this Graphics source, int twips)
{
return (int)(((double)twips) * (1.0 / 1440.0) * source.DpiX);
}
/// <summary>
/// Converts an integer value in twips to the corresponding integer value
/// in pixels on the y-axis.
/// </summary>
/// <param name="source">The Graphics context to use</param>
/// <param name="inTwips">The number of twips to be converted</param>
/// <returns>The number of pixels in that many twips</returns>
public static int ConvertTwipsToYPixels(this Graphics source, int twips)
{
return (int)(((double)twips) * (1.0 / 1440.0) * source.DpiY);
}
}
Чтобы использовать эти методы, нужно просто сделать следующее (предполагая, что вы находитесь в контексте, где CreateGraphics
возвращает Drawing.Graphics
объект (здесь this
является формой, поэтому CreateGraphics
наследуется от суперкласса Form
Control
):
using( Graphics g = CreateGraphics() )
{
Width = g.ConvertTwipsToXPixels(sizeInTwips);
Height = g.ConvertTwipsToYPixels(sizeInTwips);
}
См. раздел «Замечания» в Graphics
Документация класса для получения списка способов получения графического объекта. Более полная документация доступна в руководстве Как: создавать графические объекты .
Краткое описаниесамые простые способы:
Control.CreateGraphics
- для события Paint *
PaintEventArgs
имеет Graphics
, доступное в свойстве Graphics
. - Hand
Graphics.FromImage
изображение, и он вернет объект Graphics
, который может рисовать на этом изображении (ПРИМЕЧАНИЕ. Маловероятно, что вы захотите использовать твипы для реального изображения)