Рисуем изображение с прозрачным фоном и заставляем его перемещаться в NET CF.

Довольно долго я всевозможными способами пробовал вывести изображения с прозрачным фоном (например картинку формата png) в .NET CF на Windows Mobile устройствах. Но всё получалось либо медленно и некрасиво, либо очень сложно. А нужен был метод позволяющий делать это просто быстро и качественно. И вот недавно наткнулся на чудесный набор библиотек OpenNETCF Smart Device Framework (думаю о нём я ещё не раз напишу — в нём ну очень много полезных и нужных вещей). В этом наборе имеется библиотека OpenNNETCF.Drawing.dll — предназначенная для работы с изображениями с использованием GDI+. Вот она то мне и помогла сделать то что так давно хотелось.

Итак, сразу пример кода (поскольку сложного ничего нет):
//Для работы кода понадобится подключить:
using OpenNETCF.Drawing;
using OpenNETCF.Win32;
using System.IO; //Для загрузки файлов картинок - поиска пути до папки программы
using System.Reflection; //Для загрузки файлов картинок - поиска пути до папки программы


//Эти переменные понядобятся для загрузки изображений при запуске приложения.
OpenNETCF.Drawing.Imaging.ImagingFactoryClass factory = new OpenNETCF.Drawing.Imaging.ImagingFactoryClass();
OpenNETCF.Drawing.Imaging.IImage img;
Bitmap imageBackground;

//При загрузке приложения - загружаем изображения в память (OnLoad):
factory.CreateImageFromFile(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName).ToString() + "\\ghost.png", out img);
imageBackground = new Bitmap(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName).ToString() + "\\ground.jpg");



//При отрисовке (OnPaint) выполняем следующие действия:

IntPtr hdc;
Graphics g = this.CreateGraphics();
hdc = g.GetHdc();
//Рисуем фон.
g.DrawImage(imageBackground, 0, 0);

//Рисуем картинку с прозрачным фоном (спрайт).
OpenNETCF.Drawing.Imaging.RECT rc = OpenNETCF.Drawing.Imaging.RECT.FromXYWH(x, y, x_w, y_h);
//x,y - координаты, x_w,y_h - размеры.

img.Draw(hdc, rc, null);
g.ReleaseHdc(hdc);

Вот собственно и всё.

Smart Device Framework можно скачать здесь: http://www.opennetcf.com

Рабочий пример кода на C# можно скачать здесь: TransparentTest.rar
В примере реализовано движение спрайта над фоном вот так:

Тестировалось на HTC HD2 — полностью работоспособно!


1 комментарий

avatar
Вот ещё исходник того же самого, только с анимацией множества приведений. :)
С 25 штуками работает хорошо (у меня) со 100 штуками не справляется. Но для моих задач 25 приведеньиц — самое то что надо.
Исходник: ActionTransparentTest.rar
Скриншоты:
 
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.