Как Excel + PowerPoint решает изменить масштаб диапазонов, вставленных в изображения? - PullRequest
4 голосов
/ 01 сентября 2011

Я заметил, что когда вы копируете диапазон в Excel (копируете как рисунок - как показано на экране) и вставляете его в PowerPoint, полученное изображение не масштабируется на 100% по отношению к исходному изображению (щелкните правой кнопкой мыши на изображении, перейдите к настройкам формата и перейдите к размеру, чтобы увидеть информацию о масштабе).

Кроме того, это масштабирование отличается на разных компьютерах (может быть связано с видеокартой). Если у вас есть разные версии Office, масштабирование также отличается для каждого компьютера (т. Е. В Office 03 масштабирование составляет 100% от оригинала, в Office 07 масштабирование составляет ~ 75% от оригинала как по высоте, так и по ширине <--- эти значения могут отличаться на вашем собственном компьютере). </p>

Есть ли какая-то рифма и обоснование того, как эти масштабирования определяются внутри Office? Я спрашиваю, потому что я автоматизирую эту функцию копирования + вставки через c # (используя взаимодействие). Я использую метод CopyAsPicture, чтобы получить высоту x ширину выбранного диапазона и сохранить изображение в виде файла .emf. Затем я загружаю изображение в форму PowerPoint, используя размеры, сохраненные ранее в качестве размеров формы. Он вставляет его без ошибок, но когда я сравниваю его с нативными ctrl + c и ctrl + v из пасты Excel как рисунка, размер отличается. Я пришел к выводу, что это из-за этой странной проблемы с масштабированием.

Кроме того, в c #, если вы указываете какую-либо форму размером 100x100 и вставляете ее (используя метод фигур AddPicture), она фактически не будет 100x100 в PowerPoint. Если затем скопировать и вставить это изображение в краску, чтобы увидеть размеры, оно будет совершенно другим (для моей машины оно увеличится на 135%).

Кто-нибудь понял, что происходит? Или как офис решает эти проблемы масштабирования?

Спасибо, Shark

1 Ответ

0 голосов
/ 21 сентября 2011

Я понял ошибку в моей логике: вместо того, чтобы смотреть на масштабирование, я должен был смотреть на абсолютный размер.Одна из вещей, которые я заметил, заключалась в том, что независимо от масштабирования, размер вставляемого изображения через собственную копию и вставку был одинаковым во всех версиях Office на всех машинах.При дальнейшем анализе я обнаружил, что размер был определен двумя способами:

1) Если вы выбрали «копировать как изображение» с настройкой «как показано на экране», я разделил высоту и ширину изображения (в пикселях) на 96 (точек на дюйм), чтобы получить размер изображения в дюймах.Я считаю, что этот DPI является значением по умолчанию, используемым Office.Затем, чтобы получить его в точках, мне нужно было умножить это изображение на 72, поскольку мне нужно было преобразовать его в единицу, которую PowerPoint ожидает при операции вставки.После этого изображение в моем коде совпало с исходной процедурой.

2) Если вы выбрали опцию «как показано при печати», мой оригинальный метод работал, как мы обсуждали выше, используя разрешение метафайлов, чтобы помочьполучить размер.

Сводка:

Для показанных на экране

x = (metafile.height / 96) * 72

y = (metafile.width / 96) * 72

Для показанных при печати

x = (metafile.height / metafile.HorizontalResolution) * 72

y = (metafile.height / metafile.VerticalResolution) * 72
...