.NET

WPF TabControl, rounded TabItem

Есть замечательный пример, как сделать закладки с закруглёнными краями с помощью модификации стиля WPF TabControl и TabItem, но он не поддерживает нижнее расположение закладок TabStripPlacement=»Bottom».

Небольшая модификация примера позволила расположить закладки снизу. Загрузите Полный исходный код для VisualStudio 2010, с 3-имя вариантами TabControl и изменением стиля для нижнего расположения закладок.

Далее

Sharpmap, GDAL, OziExplorer OZF2, OZF3

Уже давно, я задумывался об одновлении Particler — программы для визуализации и рендера GPS треков на карте и для наложения GPS данных на видео. Программа требует обновления картографического движка, и новый движок должен быть open source, написан для .net или с возможностью работы с ним из .net и уметь работать как с растровыми, так и векторными данными. А также обязательно поддерживать формат OziExplorer MAP/OZF2/OZF3. Поддержка OziExplorer необходима, т.к. несмотря на широкое распространение в последние годы векторных карт, они хороши в основном для тех мест, где есть дороги, а для туристов всё же основными остаются старые, добрые карты ген. штаба.

Всем перечисленным требованиям удовлетворяет картографический движок Sharpmap. Но заставить его понимать OZF, оказалось не просто.

Далее

Terrain Viewer — MDX/SlimDX Demo

Создаём Portable версию Terrain Viewer

Теперь немного улучшим демонстрационное приложение Terrain Viewer. Эти преобразования не касаются DirectX.
Для создания переносимой или portable версии приложения, желательно, чтобы все требуемые ресурсы размещались в самом файле приложения. В тоже время мы оставим возможность приложению работать с отдельным файлом maps.xml.
Добавим минимально необходимые для работы программы внешние файлы Application.ico maps.xml Earth_Map.png default_sky.jpg default_side.png default_texture.png sample_dem.bil sample_texture.png в проект в каталог Resources и установим для них всех Build Action «Embedded Resource».

Далее

Managed DirectX, конвертация из MDX в SlimDX (3/3)

Продолжаем миграцию Managed DirectX в SlimDX framework, на примере MDX приложения Патрика Мурриса Terrain Viewer.

Как и раньше, в виде комментариев показан Managed DirectX код, и рядом с ним новый код, работающий с SlimDX.

Далее

Managed DirectX, конвертация из MDX в SlimDX (2/3)

Начинаем миграцию Managed DirectX в SlimDX framework, на примере MDX приложения Патрика Мурриса Terrain Viewer.

В виде комментариев показан Managed DirectX код, и рядом с ним новый код, работающий с SlimDX.

Далее

Сохраняем AVI файл из WPF

Собственно сохранение скриншотов WPF программы с помощью RenderTargetBitmap и BitmapEncoder не новость. Сложнее сохранить анимацию и не просто в набор картинок, а сразу в AVI файл.

Мне удалось найти только один способ сделать это, с использованием весьма старой библиотеки http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx Библиотека предназначена для работы с AVI файлами из .NET, написана на C# и работает даже на .NET 1.1.

Если вы знаете другой способ, подскажите!

Если вы хотите работать с AVI из WPF, посмотрите сразу другой пример http://blogs.msdn.com/b/saveenr/archive/2008/09/22/wpf-xaml-saving-an-animation-as-an-avi-video-file.aspx

Пример хороший, но передавать Bitmap через файл слишком накладно, лучше использовать MemoryStream.

    BmpBitmapEncoder encoder = new BmpBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));

    using (MemoryStream stream = new MemoryStream())
    {
        encoder.Save(stream);

        System.Drawing.Bitmap drawingBitmap = new System.Drawing.Bitmap(stream);
        aviStream.AddFrame(drawingBitmap);
    }

Сохранение AVI было необходимо для улучшения программы Particler, поэтому пришлось провести серию экспериментов.

Далее