Рисуем изображение с прозрачным фоном и заставляем его перемещаться в NET CF. C#
Довольно долго я всевозможными способами пробовал вывести изображения с прозрачным фоном (например картинку формата 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 [250.96 Kb] (cкачиваний: 3)
В примере реализовано движение спрайта над фоном вот так:
Тестировалось на HTC HD2 — полностью работоспособно!