Возьмем, к примеру, изображение кусочка сыра. Файл с изображением сыра надо скопировать в папку, в которой хранятся файлы проекта. Затем следует щелкнуть правой кнопкой мыши на названии проекта Bouncer
в окне Solution Explorer
, выбрать пункт контекстного меню Add
, а затем перейти к пункту подменю Add Existing Item
. В диалоговом окне Add Existing Item
надо выбрать файл cheese.gif
. После этого остается нажать кнопку Add
. Картинка теперь добавлена в проект, но еще не является частью программы.
Необходимо указать, что графический файл будет храниться в виде встроенного ресурса. Нужно щелкнуть правой кнопкой мыши на значке графического файла в окне Solution Explorer
и выполнить команду контекстного меню Properties
. В разделе Build Action
по умолчанию используется пункт Content
. Но в данном случае нужно указать пункт Embedded Resource
.
Теперь картинка является частью сборки, и для распространения программы нам понадобится единственный исполняемый файл, в котором будут содержаться все необходимые изображения.
При работе программы необходимо получить доступ к графическому файлу из ресурсов и вывести изображение на экран. Для этого сначала необходимо получить ссылку на сборку. Соответствующий код приведен в листинге 11.1.
// Получим ссылку на сборку
System.Reflection.Assembly execAssem =
System.Reflection.Assembly.GetExecutingAssembly();
Метод System.Reflection.Assembly.GetExecutingAssembly
возвращает сборку, из которой выполняется текущий код. Получив в программе ссылку на сборку, можно получить доступ к встроенным ресурсам, в том числе к изображению сыра. Метод GetManifestResourceStream
позволяет извлекать указанный ресурс из сборки. Для этого нам надо указать имя файла и название пространства имен. В нашем случае это будет Bouncer.cheese.gif
, как показано в листинге 11.2.
///
/// Изображение сыра
///
private Image cheeseImage = null;
public Form1() {
InitializeComponent();
// Получим ссылку на сборку
System.Reflection.Assembly execAssem =
System.Reflection.Assembly.GetExecutingAssemblу();
// Получим доступ к картинке с сыром
cheeseImage = new System.Drawing.Bitmap(
execAssem.GetManifestResourceStream(@"Bouncer.cheese.gif");
}
При запуске программа загружает из ресурсов картинку. Теперь надо вывести изображение на экран. Для этого нужно воспользоваться событием Paint
, как показано в листинге 11.3.
private void Form1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(cheeseImage, 0, 0);
}
После запуска программы в левом углу экрана будет отображен кусочек сыра (рис. 11.2).
Рис. 11.2. Вывод изображения на экран
Теперь нужно научиться перемещать объект по экрану. Если это делать достаточно быстро, то у пользователя создается ощущение непрерывного воспроизведения анимации. Для этого следует создать метод updatePositions
, который позволит перемещать изображение. Пока ограничимся движением вниз и вправо. Соответствующий код приведен в листинге 11.4.
///
/// Координата X для рисования сыра
///
private int cx = 0;
///
/// Координата Y для рисования сыра
///
private int cy = 0;
private void updatePositions() {
cx++;
cy++;
}
Переменные cx
и cy
содержат текущие координаты кусочка сыра. Меняя значения этих координат, можно управлять расположением изображения на экране. Теперь нужно переписать код для события Form1_Paint
, как это показано в листинге 11.5.
private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e) {
// Текущая позиция сыра
e.Graphics.DrawImage(cheeseImage, cx, cy);
}