Как масштабировать спрайт-изображение, не теряя информацию о цветных клавишах? - PullRequest
1 голос
/ 02 апреля 2010

В настоящее время я разрабатываю простое приложение, которое отображает карту и рисует на ней некоторые маркеры. Я занимаюсь разработкой для Windows Mobile, поэтому я решил использовать интерфейсы DirectDraw и Imaging, чтобы сделать приложение быстрым и красивым. Карта перемещается, когда пользователь перемещает палец по сенсорному экрану, поэтому анимация перемещения / прокрутки всей карты должна быть быстрой, но это не так.

При каждом обновлении карты мне приходится рисовать часть карты, кнопки управления и маркеры - кнопки и маркеры предварительно загружаются на поверхность DirectDraw в виде мип-карты. Поэтому единственное, что я делаю, это BitBlit из mipmap в задний буфер и из заднего буфера на первичную поверхность (я не могу использовать перелистывание страниц из-за оконного режима моего приложения).

Ранее я использовал предварительно умноженную альфа-поверхность с 32-битным пиксельным форматом ARGB для изображений mipmap, все выглядело хорошо, но рисование всей «сцены» было ужасно медленным - я мог забыть о плавной прокрутке карты. Сейчас я использую mipmap с собственным (RGB565) форматом пикселей и цветовой клавишей цвета фуксия (0xFF00FF). Рисование намного лучше.

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

Как решить эту проблему? Я могу использовать альфа блиттинг, но он слишком медленный - даже в формате ARGB 1555.

...