Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Сколько пикселей в 1 сантиметре?  [new]
Solver
Member

Откуда:
Сообщений: 30
Подскажите, сколько пикселей в 1 сантиметре?
29 ноя 07, 15:22    [4982491]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
Dima T
Member

Откуда:
Сообщений: 15288
Это зависит от разрешения и размера экрана. Ищи WinAPI функции получения первого и второго.

А тебе это зачем?
29 ноя 07, 15:42    [4982648]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Solver
Подскажите, сколько пикселей в 1 сантиметре?

По вертикали или по горизонтали?
29 ноя 07, 15:43    [4982652]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Посмотри здесь

Как перевести координату в пикселях (Pixcels) в твипы (Twips)

В этом примере

GetDeviceCaps(m.liHDC,88) - количество пикселей в логическом дюйме по вертикали
GetDeviceCaps(m.liHDC,90) - количество пикселей в логическом дюйме по горизонтали

1 дюйм = 25,4 миллиметра

m.liHDC - Handle to the device context. Идентификатор контекста устройства.

Только следует понимать, что в данном случае и пиксель, и сантиметр, и дюйм - это величины логические, а не постоянные. Зависят от конкретного устройства и его настроек.

Например, при разных разрешениях монитора можно получить разные значения. Хотя, для обычных мониторов (с электронно-лучевой трубкой) и стандартных разрешениях вроде 640х480 или 800х600 обычно получается 96 пикселей на один логический дюйм или 38 пикселей на один логический сантиметр.
29 ноя 07, 17:16    [4983391]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
Solver
Member

Откуда:
Сообщений: 30
Спасибо всем!
Вообще-то я имел ввиду сантиметры не на экране, а при печати.
29 ноя 07, 17:37    [4983558]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
Sergey Sizov.
Guest
Вообще-то я имел ввиду сантиметры не на экране, а при печати.

У принтеров пиксели тоже разного размера. Вся техинфо в доке на принтер.
29 ноя 07, 17:40    [4983592]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
Burn
Member

Откуда: Днепропетровск, Украина
Сообщений: 1167
Solver
Спасибо всем!
Вообще-то я имел ввиду сантиметры не на экране, а при печати.

Зависит от настроек и типа принтера. Можно сказать точно точка растра (это та, которая указана в параметре DPI - dots per inch - точек на дюйм) говорит о минимальнойм размере точки. Один пиксел отображается несколькимя точками. Нужный параметр LPI-lines per inch - линии на дюйм. Только этот параметр производители обычно не указывают если это не профессиональное оборудование
29 ноя 07, 20:21    [4984419]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Сколько пикселей в 1 сантиметре?  [new]
Ильин Колян
Guest
Solver, В 1 см. - 40 пикселей!!!
21 дек 08, 09:02    [6599347]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
piva
Member

Откуда: Курган
Сообщений: 1096
Ильин Колян
Solver, В 1 см. - 40 пикселей!!!

Линейкой мерял ?
21 дек 08, 14:38    [6599619]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
Kruchinin Pahan
Member

Откуда: Екатеринбург
Сообщений: 925
piva
Ильин Колян
Solver, В 1 см. - 40 пикселей!!!

Линейкой мерял ?

Нет, он взял шрифт System, написал им фразу "1 см." и посчитал количество пикселей которыми начертана данная фраза.
22 дек 08, 06:05    [6601099]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
Dinozavr
Member

Откуда: Москва
Сообщений: 26
Solver, меня тоже очень интересовал этот вопрос.
Дело в том, что захотелось мне в свое время, чтобы в отчете с переменной высотой детали (от 1 до 5 строк печати) разбиение на страницы происходило бы "культурно", т.е. без больших запасов и разрывов строк таблицы.
Я долго экспериментировал (принтер HP LaserJet 5L PCL, шрифт Arial) и в результате получил значение: 1 пиксел на печати = 0.268 мм.
Кроме того, некоторое время назад в каком-то редакторе изображений (не помню, в каком, возможно для фотопринтера-сканера-копира HP 5700) в опции задания размера для печати была возможность указывать размер либо в мм, либо в пикселах. Так вот, сопоставление значений для одного и того же размера дало значение: 1 пиксел на печати = 0.263 мм.
Как видите, результаты близкие. Кстати, можно еще сравнить координаты какого-либо объекта на поле отчета путем включения опции View - Show position и установки разных метрик в File - Page Setup - Ruler/Grid. Тоже получается 0.263 - 0.264.
Пользуясь этими значениями, я могу еще до печати определить, сколько строк займет на печати текст из очередной записи. Следовательно, я могу еще до печати разбить данные по страницам. Несмотря на всю эмпиричность, практические результаты (вид отчета) вполне удовлетворительны.
Если нужны подробности - спрашивайте.

Всем поздравления с Новым Годом и наилучшие пожелания!

P.S. Ниже привожу текст функции, которой я пользуюсь для этой цели.

******************************************************************************
*  Определить, сколько строк займет текст в колонке отчета заданной ширины,  * 
*  если он выводится в поле Stretch		                                     *
******************************************************************************
FUNCTION GetTextKolRows
LPARAMETERS tnFieldWidth, tcText, tcFontName, tnFontSize

* Входные параметры:
*	tnFieldWidth - ширина заполняемого поля в миллиметрах
* 	tcText - текст, выводимый в поле
* 	tcFontName - имя шрифта
* 	tnFontSize - размер шрифта

* Предупреждение 1. Эта функция - сплошная эвристика в том смысле,
*                   что точно не определен алгоритм разбиения текста 
*                   на строки для полей Stretch при печати отчета.
*
* Предупреждение 2. Пиксел здесь эмпирически считается 0.268 мм.
*
* Функция отлажена и проверена при ширине поля 52.9 мм и шрифте Arial,8. 
* Результат - удовлетворительный, т.е. функция правильно предсказывала количество строк,  
* на которые фактически разбивался текст в колонке при печати отчета.

LOCAL lnKolStr, lnFieldWidthF
lnFieldWidthF = tnFieldWidth / 0.268 / FONTMETRIC(6, tcFontName, tnFontSize)		&& Ширина поля в фокселах
					  
LOCAL lcTextRest, lnFieldRest, lcNextWord, lcTextRow, lni, lnj, lnKolWords 
lcTextRest = ALLTRIM(tcText)			&& Остаток текста для текущей строки
lnFieldRest = lnFieldWidthF 			&& Ширина свободного остатка поля в фокселах
lcTextRow = ""							&& Текст в очередной строке поля
lnKolStr = 0

DO WHILE NOT EMPTY(lcTextRest)						&& Цикл виртуального разбиение текста на строки
	lcTextRow = ""									&& Текст в очередной строке поля
	lnKolWords = GETWORDCOUNT(lcTextRest)			&& Количество слов в остатке текста
	FOR lni=1 TO lnKolWords 						&& Цикл заполнения строки
		lcNextWord = GETWORDNUM(lcTextRest, lni)	&& Очередное слово из остатка текста
		
		IF TXTWIDTH(lcNextWord, tcFontName, tnFontSize) > lnFieldWidthF 
				*-- Если очередное слово длиннее всего поля, то его надо разбить,
				*-- т.е. в остаток поля поместить то, что влезет,
				*-- а затем перейти к новой строке
				
			lnFieldRest = lnFieldWidthF - TXTWIDTH(lcTextRow, tcFontName, tnFontSize)	&& Ширина свободного остатка поля
			
			lnj = 1   					&& Количество сиволов, помещаемых в остаток поля
			DO WHILE lnj<=LEN(lcNextWord) .AND. TXTWIDTH(SUBSTR(lcNextWord, 1, lnj), tcFontName, tnFontSize) <= lnFieldRest
				lnj = lnj+1 
			ENDDO

			lcTextRow = lcTextRow + SUBSTR(lcNextWord, 1, lnj-1)				&& Текст в очередной строке поля

			lnKolStr = lnKolStr + 1			&& Закончить строку 
			
			lcTextRest = ALLTRIM(SUBSTR(lcTextRest, IIF(lni=1, 1, AT(" ", lcTextRest, lni-1)+1) + lnj-1))
			
			EXIT
		ELSE
			IF TXTWIDTH(lcTextRow + lcNextWord, tcFontName, tnFontSize) <= lnFieldWidthF 
					*-- Если очередное слово можно добавить к строке --*
				lcTextRow = lcTextRow + lcNextWord + " " 	&& Текст строки с добавленным словом
				
				IF lni = lnKolWords					&& Если добавляется последнее слово
					lnKolStr = lnKolStr + 1			&& Закончить строку
					lcTextRest = ""
					EXIT
				ENDIF 
			ELSE		&& Если очередное слово (которое короче поля) нельзя добавить к строке --*
				lnKolStr = lnKolStr + 1			&&  Закончить строку
				lcTextRest = ALLTRIM(SUBSTR(lcTextRest, IIF(lni=1, 1, AT(" ", lcTextRest, lni-1))))
				EXIT
			ENDIF
		ENDIF
	ENDFOR
	
*	MESSAGEBOX(lcTextRow) 
ENDDO

RETURN MAX(1, lnKolStr)
************************************************************
2 янв 09, 23:54    [6643974]     Ответить | Цитировать Сообщить модератору
 Re: Сколько пикселей в 1 сантиметре?  [new]
pna
Guest
Владимир М,спасибо,что ответили на вопрос по-человечески :без "зачем" и т.д.Мне это понадобилось.Если бы я спросила спросила дома своего действительно знающего специалиста,то выслушала бы целую лекцию про кучу мне ненужного.Оттого ценю ,когда просто отвечают на вопрос.
3 ноя 09, 12:59    [7876192]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить