Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Единицы измерения Graphics Добавлено: 19.10.06 13:55  

Автор вопроса:  SergeyR
Добрый день!
Подскажите, пожалуйста, как получить соотношения между единицами измерений объекта
Graphics? Мне надо рисовать внутри одного
Graphics, используя GraphicsUnit равный то Pixel, то Millimeter, при этом результат должен быть одинаков.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #2
Добавлено: 19.10.06 16:21
ScreenWidthMm и прочие на самом деле не за экран отвечают. Первоначально только экран планировалось использовать, но потом и принтер, и промежуточные битмапы. Это правильнее называть DcWidthMm и т.д.

Ответить

Номер ответа: 3
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #5
Добавлено: 19.10.06 20:07
Как ты получил эти значения? Какой HDC использовал для расчётов.

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #9
Добавлено: 20.10.06 15:42
На принтер напечатай и посмотри там. Если тоже криво то что-то у тебя с расчётами. Если же ок значит монитор странно определился

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам