Поэтому, графический карандаш (TGPPen), которым рисуется линия, принимает в качестве ширины рисования значение с плавающей точкой. А реальная ширина расчитывается исходя из установленного значения TGPGraphics.PageUnit.
graphics.SetPageUnit(UnitMillimeter);
{
UnitWorld, // 0 -- "мировые координаты>, для "отвлеченных> расчетов без конкретной привязки к устройству вывода
UnitDisplay, // 1 -- используется при различных трансформациях
UnitPixel, // 2 -- каждое значение = 1 пикселю устройства вывода.
UnitPoint, // 3 -- каждое значение = 1/72 дюйма (единица счета для принтера).
UnitInch, // 4 -- каждое значение = 1 дюйм.
UnitDocument, // 5 -- каждое значение = 1/300 дюйма.
UnitMillimeter // 6 -- каждое значение = 1 миллиметру.
}
Таким образом, линия с заданной толщиной 1 не обязательно будет линией толщиной в 1 пиксел.
Если же необходимо рисовать линию толщиной 1 пиксел вне зависимости от установок, необходимо при создании карандаша передавать как значение толщины -1
var graphics : TGPGraphics; pen: TGPPen; begin graphics := TGPGraphics.Create(DC); pen := TGPPen.Create(MakeColor(255, 0, 0, 255), -1); graphics.DrawLine(pen, 0, 0, 200, 100); graphics.Free; pen.Free; end;

Как нарисовать линию толщиной 1 пиксел
