Шаг 75.
Microsoft Visual C++ 2010. Начала.
Программирование. Графика. Графические примитивы. Битовые образы

    На этом шаге мы рассмотрим формирование и использование битовых образов.

    Для формирования сложных изображений используют битовые образы. Битовый образ — это небольшая картинка, которая находится в оперативной памяти компьютера. Так как битовый образ находится в оперативной памяти, то его можно очень быстро вывести на экран. Именно поэтому битовые образы используются для формирования картинок в играх.

    Создать битовый образ (объект Bitmap) можно путем загрузки из файла (bmp, jpg или gif), ресурса или путем копирования из другого графического объекта (Image).

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

  Bitmap^ sky; // битовый образ
  // загрузить из файла
  plane = gcnew Bitmap(Application::StartupPath + "\\sky.bmp");

    Битовый образ можно вывести на графическую поверхность формы или компонента PictureBox при помощи метода DrawImage. В качестве параметров метода DrawImage надо указать битовый образ и координаты точки поверхности, от которой следует вывести битовый образ. Например, инструкция

  e->Graphics->DrawImage(sky,0,0);
выводит на графическую поверхность битовый образ sky.

    Вместо параметров x и y в инструкции вызова метода DrawImage можно указать структуру типа Point.

    Для битового образа можно задать прозрачный цвет. Точки рисунка, цвет которых совпадает с "прозрачным", при выводе битового образа не отображаются. Прозрачный цвет задает метод MakeTransparent. В инструкции вызова метода необходимо указать цвет, который следует рассматривать как прозрачный. Например, инструкция

  plane->MakeTransparent(Color::Magenta); // plane — объект Bitmap
задает, что прозрачным является цвет Magenta (пурпурный).

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

    Программа "Два самолета" (рисунок 1) демонстрирует загрузку и отображение битовых образов. Небо и самолеты — это битовые образы. Загрузку битовых образов выполняет конструктор формы, вывод — функция обработки события Paint. Белое поле вокруг левого самолета показывает реальную форму и размер битового образа plane. Белого поля вокруг правого самолета нет, т. к. перед повторным выводом битового образа plane для него был определен прозрачный цвет. Текст конструктора и функции обработки события Paint приведены ниже.

// конструктор 
Form1(void)
{
	InitializeComponent();
	//
	//TODO: добавьте код конструктора
	//
	// загрузить битовые образы из файла 
	try 
	{
		sky = gcnew Bitmap(Application::StartupPath + "\\sky1.jpg"); 
		// установить размер формы равным размеру фонового рисунка 
		this->ClientSize = sky->Size; 
		plane = gcnew Bitmap(Application::StartupPath + "\\plane.jpg"); 
	}
	catch (System::Exception ^e) 
	{
		;
	}
}
.    .   .   .   .   .
private: 
	// битовые образы 
	Bitmap^ plane; // самолет 
	Bitmap^ sky; // небо

private: System::Void Form1_Paint(System::Object^  sender, 
      System::Windows::Forms::PaintEventArgs^  e) {
	 if (sky != nullptr) 
	 {
		 // вывести фоновый рисунок 
		 e->Graphics->DrawImage(sky, 0, 0); 
	 }
	 if (plane != nullptr) 
	 {
		 // Левый самолет 
		 e->Graphics->DrawImage(plane, 70, 50); 
		 // Правый самолет
		 // задать прозрачный цвет 
		 plane->MakeTransparent(); 
		 e->Graphics->DrawImage(plane, 500, 80); 
	 }
 }
Архив проекта можно взять здесь.


Рис.1. Задав прозрачный цвет, можно скрыть фон

    Из приведенного рисунка видно, что система не совсем корректно обрабатывает задание прозрачного цвета (причина такой обработки пока не ясна).

    Со следующего шага мы будем рассматривать анимацию.




Предыдущий шаг Содержание Следующий шаг