.NET преобразование координат печати - PullRequest
1 голос
/ 23 августа 2011

Я не могу получить простой ответ на это. У меня есть пиксельные координаты, я хочу напечатать изображение на (альбомной) странице с этими координатами.

В моем печатном мероприятии я делаю:

Dim mypoint As New PointF(1, 1192)
e.Graphics.DrawImage(My.Resources.littleSquare, mypoint)

Это явно не работает: я указываю пиксели, но драйвер ожидает дюймы (?) Или что?

Пытался: e.Graphics.PageUnit = GraphicsUnit.Inch без удачи.

Я бы хотел использовать метод конвертации, например:

Dim mypoint As New PointF(convertPixelsIntoInches(1), convertPixelsIntoInches(1192))
e.Graphics.DrawImage(My.Resources.littleSquare, mypoint)

Private Function convertPixelsIntoInches(ByVal pixels As Integer) As Single
    Return ??
End Function

Есть намеки? Спасибо.

1 Ответ

1 голос
/ 23 августа 2011

Я думаю, что понял.

Мои пиксельные координаты не фиксированные , но относительно холста 300 точек на дюйм, поэтому я должен выполнить двойное преобразование DPI, например:

e.Graphics.PageUnit = GraphicsUnit.Pixel
dpiX = e.Graphics.DpiX
dpiY = e.Graphics.DpiY

Dim mypoint As New PointF(convertPixelsIntoInchesX(1501), convertPixelsIntoInchesY(1192))
e.Graphics.DrawImage(My.Resources.myblacksquare, mypoint)

Private Function convertPixelsIntoInchesX(ByVal pixel As Integer) As Single
   Return CSng(pixel * dpiX / 300)
End Function

Private Function convertPixelsIntoInchesY(ByVal pixel As Integer) As Single
        Return CSng(pixel * dpiY / 300)
End Function
...