PDF Расчет высоты и ширины нарисованного изображения - PullRequest
2 голосов
/ 12 января 2011

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

Может ли кто-нибудь помочь мне в следующем примере?

MediaBox = [0 0 612 792] (размер страницы в единицах пользовательского пространства). Размер оригинала (Ш / В) = 155/76 (как указано в словаре изображений)

Изображениеинструкции рисования:

q 74.400131 0 0 -36.000061 249.100266 224.240173 см / Im1 Do
Q

Значения af:

a = 74.400131

b = 0

c = 0

d = -36.000061

e = 249.100266

f =224.240173

В результате получается следующая матрица:

74.400131 0 0

0 -36.000061 0

249.100266 224.240173 1

Также приведены следующие формулы:

x ′ = a × x + c × y + ey ′ = b × x + d × y + f

Итак, что я думал сейчас сделать, это рассчитать координатуисходя из углов TopLeft-, TopRight- и BottomLeft, используя приведенные выше формулы, а затем используйте эту формулу:

w = TopRightX-TopLeftX h = BottomLeftY-TopLeftY

НО: Как работает вычисление этих координат?Я пытался это вычислить, например, угол BottomRight:

X = 74.400131 * 155 + 0 * 76 + 249.100266 = 11`781.120

Этот результат не может бытьправильно ...

Может ли кто-нибудь помочь мне вычислить это правильно?

Спасибо за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 01 февраля 2011

Вы забыли преобразование из пространства пользователя в пространство устройства. Матрица с картинки объединена с предыдущей матрицей (которая обычно представляет размер страницы и масштаб)

Значения в матрице изображения рассчитываются следующим образом

width        0             0
  0       height           0
  x   page_h-(y+height)    1
0 голосов
/ 01 февраля 2011

В PDF изображение считается размером 1x1 в единицах пользовательского пространства.Матрица преобразования используется для масштабирования изображения для отображения в желаемом размере.Элементы a и d в матрице преобразования представляют коэффициенты масштабирования, поэтому в вашей ситуации размер отображаемого изображения (в единицах пользовательского пространства) составляет 74,400131 * 36,000061 точек (единицы пространства пользователя по умолчанию).Ваш пример - самая простая ситуация, потому что я предполагаю, что перед оператором q больше ничего нет.Но в PDF матрицы преобразования объединяются, поэтому необходимо выполнить весь поток контента, чтобы увидеть фактическую матрицу преобразования, которая используется при отображении изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...