Путь разработчика    

Перечислить записи метафайлов в C#

В этом примере показано, как вы можете перечислять записи метафайла. Затем вы можете решить, какие из них делать. (Хотя я вообще не уверен, как вы принимаете это решение.)

Когда программа запускается, она использует следующий код для загрузки метафайла и перечисления записей метафайлов.

Python

Этот код начинается с определения некоторых переменных, которые программа должна будет перечислять в записях метафайлов. TheMetafile - загруженный метафайл. Обработчик события Load формы загружает метафайл, и программа сохраняет его загруженным для удобства использования.

TheGraphics - это Graphics объект, который программа будет использовать для рисования на растровом изображении. LastRecord - это индекс последней записи в метафайле, который мы нарисовали. Вы увидите, как эти переменные используются в ближайшее время.

Обработчик событий Load формы загружает метафайл. Затем он создает объект Graphics (любой объект будет делать), а затем вызывает его метод EnumerateMetafile для перечисления записей метафайла. Конечным параметром этого метода является метод обратного вызова, который EnumerateMetafile должен вызывать для каждой записи метафайла.

Обработчик событий Load завершается проверкой всех элементов в CheckedListBox, а затем вызывает DisplayRecords, чтобы показать результат.

Метод ListRecordCallback вызывается для каждой записи в метафайле. Он добавляет имя типа записи в список программы.

Следующий код показывает метод DisplayRecords, который рисует выбранные записи метафайлов.

Python

Этот метод создает растровое изображение, которое имеет размер, соответствующий размеру метафайла. Обратите внимание, что разрешение растрового изображения, вероятно, не будет соответствовать разрешению метафайла. Метафайлы часто используют очень высокое разрешение, например, 1000 точек на дюйм. Напротив, растровое изображение, отображаемое на экране, обычно имеет разрешение 96 пикселей на дюйм. Возможно, вам захочется сделать растровое изображение достаточно большим, чтобы представлять каждую позицию в метафайле в виде пикселя. К сожалению, это даст вам действительно огромный растровый (это может быть миллионы пикселей в ширину и миллионы пикселей), которые вы, вероятно, не сможете создать.

К счастью, это не имеет значения. Нам нужно будет изменить размер растрового изображения так, чтобы он соответствовал PictureBox в программе, так что при создании растрового изображения размер метафайла будет достаточно большим.

Далее метод устанавливает LastRecord в -1, поэтому код чертежа начинается с первой записи.

Затем он создает объект Graphics, связанный с растровым изображением, и сохраняет его в переменной TheGraphics. Код создает Rectangle, чтобы представить область, в которой мы хотим, чтобы метафайл был нарисован, а затем вызывает метод EnumerateMetafile объекта Graphics для перечисления метафайла записи снова. На этот раз конечный параметр DrawRecord, поэтому метод вызывает его для каждой записи метафайла.

Метод завершается отображением растрового изображения.

В следующем коде показан метод DrawRecordCallback.

Python

Этот метод увеличивает LastRecord, поэтому он содержит индекс следующей записи, которую мы рассматриваем. Он использует это значение, чтобы проверить, установлен ли соответствующий элемент списка. Если он не установлен, он отображает сообщение в окне консоли и продолжает.

Если элемент отмечен, метод рисует запись. Для этого он создает массив байтов. Если запись имеет данные, код копирует ее в массив байтов. Затем метод вызывает метод PlayRecord метафайла, передавая ему информацию о записи. Это заставляет метафайл записывать запись на графический объект.

Источник: http://csharphelper.com/blog/2016/04/enumerate-metafile-records-c/



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Язык программирования C# (Хейлсберг А. 2012)

Перед вами — четвертое издание главной книги по языку C#, написанной легендой программирования — Андерсом Хейлсбергом, архитектором C#, Delphi и Turbo Pasc...

28 01 2020 22:39:16

Hello World! Первая программа на Java

Наиболее распространенным примером первой Java-программы является знаменитый Hello World! программа. Прежде чем перейти к первой программе Java, вы должны...

27 01 2020 15:14:53

В чем разница между файлами .py и .pyc?

Python компилирует .py файлы и сохраняет его как .pyc-файлы, поэтому он может ссылаться на них при последующих вызовах. Файл .pyc содержит скомпилированный...

26 01 2020 8:59:10

Добавление «свойства расширения» в классы в C#

Методы расширения позволяют добавлять новые методы к существующим классам, даже если у вас нет доступа к исходному коду классов. Например, пример Случайные...

25 01 2020 23:12:36

Позвольте пользователю выбрать критерии поиска базы данных в C#

Верхняя часть этой программы содержит три столбца элементов управления. В левом столбце содержатся комбинированные поля, содержащие имена полей в таблице б...

24 01 2020 6:29:26

Как нарисовать анимированный текст в C#

Обратите внимание, что результат в исполняемом файле лучше, чем результат, предоставляемый GIF справа. GIF немного отрывистый, потому что он использует тол...

23 01 2020 3:31:32

Массивы в JavaScript

Массив - это структура данных, состоящая из набора элементов, каждый из которых идентифицируется по меньшей мере одним индексом или ключом массива. Он испо...

22 01 2020 13:53:11

Как программировать на Visual C# 2012 (Пол Дейтел, Харви Дейтел)

Эта книга, выходящая уже в пятом издании, является одним из самых популярных в мире учебников по программированию на платформе Microsoft .NET на языке Visu...

21 01 2020 20:34:50

Eclipse

Eclipse — бесплатная IDE модульных кроссплатформенных приложений. В первую очередь служит для разработки расширений, в чем и заключается главное её преимущ...

20 01 2020 8:15:17

Выберите разрешение принтера в C#

В этом примере показано, как разрешить пользователю выбирать разрешение принтера. Когда вы устанавливаете принтер объекта PrintDocument, его коллекция Defa...

19 01 2020 21:33:23

Прозрачные изображения кнопок в C#

Кажется, я продолжаю писать эту программу, потому что мне нужно делать изображения кнопок довольно часто. Я хотел использовать простое изображение с прозра...

18 01 2020 7:11:39


Parse error: syntax error, unexpected ',' in /home/users/9/9161484547/domains/flash-mx.ru/lessons/926.php on line 69