Страница: 1 |
Страница: 1 |
Вопрос: Единицы измерения Graphics
Добавлено: 19.10.06 13:55
Автор вопроса: SergeyR
Добрый день!
Подскажите, пожалуйста, как получить соотношения между единицами измерений объекта
Graphics? Мне надо рисовать внутри одного
Graphics, используя GraphicsUnit равный то Pixel, то Millimeter, при этом результат должен быть одинаков.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #1
Добавлено: 19.10.06 16:16
для пикселей я в своей программе использовал GetDeviceCaps. Там всё просто. Узнаёшь размеры в HDC пикселах и в милимметрах. Кароч, вот те код
ScreenWidthPix = GetDeviceCaps(dc, HORZRES);
ScreenHeightPix = GetDeviceCaps(dc, VERTRES);
ScreenWidthMm = GetDeviceCaps(dc, HORZSIZE);
ScreenHeightMm = GetDeviceCaps(dc, VERTSIZE);
float PixInCmX = ScreenWidthPix / (ScreenWidthMm/10);
float PixInCmY = ScreenHeightPix / (ScreenHeightMm/10);
Как это использовать надеюсь поймёшь
Номер ответа: 2
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #2
Добавлено: 19.10.06 16:21
ScreenWidthMm и прочие на самом деле не за экран отвечают. Первоначально только экран планировалось использовать, но потом и принтер, и промежуточные битмапы. Это правильнее называть DcWidthMm и т.д.
Номер ответа: 3
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #3
Добавлено: 19.10.06 16:25
хм, я не посмотрел что форум по точке... но как вариант работает, только думаю должны быть встроенные средства.
Номер ответа: 4
Автор ответа:
SergeyR
Вопросов: 5
Ответов: 9
Профиль | | #4
Добавлено: 19.10.06 18:04
На моем компе эти ф-ции выдают след. знач-я:
разрешение: 1280X960
размер дисплея в мм : 320X240
коэф-т получается равен 4 и для вертикали и для горизонтали
Вставляю в OnPaint своей формы след. код
Dim g As Graphics = e.Graphics
Dim p As New Pen(Color.Black, 1)
Dim dpMMX As Single = 4
g.PageUnit = GraphicsUnit.Pixel
g.DrawLine(p, 0, 2, 100 * dpMMX, 2)
g.PageUnit = GraphicsUnit.Millimeter
g.DrawLine(p, 0, 3, 100, 3)
В итоге получаю две линии разной длины.
Методом подбора удалось определить, что коэф-ты
в моем случае должны быть равны примерно 3.57 для горизонтали и 3.36 для вертикали, но как их получить в общем случае мне непонятно.
Номер ответа: 5
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #5
Добавлено: 19.10.06 20:07
Как ты получил эти значения? Какой HDC использовал для расчётов.
Номер ответа: 6
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #6
Добавлено: 19.10.06 20:18
У меня разрешение 1280, 1024. Размеры физические 337, 270 мм. коэф-ы равны 3.79, 3.79 пикселей в миллиметре. 38 в сантиметре. При выводе на экран проверял с линейкой - всё сходится. У принтера при печати разрешение в 3 раза больше. Физический размер кривой был, поэтому задал размеры А4. В итоге на листе те же размеры (по линейке). Отсюда вывод - проверь размер экрана линейкой.
Номер ответа: 7
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #7
Добавлено: 19.10.06 20:26
Мля, не хватает редактирования постов. Итак, HDC надо брать из обработчика paint. Ну и тесты мои - это когда я программу делал. Она не расчитана на линии. Она печатала штрихкоды. Всё было верно на 2 компах (моём и заказчика), и 3 принтерах (моём, виртуальном pdf и заказчика) Так что хз что у тя там
Номер ответа: 8
Автор ответа:
SergeyR
Вопросов: 5
Ответов: 9
Профиль | | #8
Добавлено: 20.10.06 11:30
Понял в чем проблема. Размер экрана в мм, возвращаемый ф-цией GetDeviceCaps не совпадает
с реальным размером экрана (линейкой замерял).
Фун-ция возвращает 320x240, а реально 357x286.
Понять бы еще почему.
Номер ответа: 9
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #9
Добавлено: 20.10.06 15:42
На принтер напечатай и посмотри там. Если тоже криво то что-то у тебя с расчётами. Если же ок значит монитор странно определился