WPF не имеет встроенного механизма для этого.Я думаю, что самый простой способ - это:
- Преобразовать растровое изображение в геометрию, используя библиотеку трассировки, такую как potrace, упомянутую Ли Райаном.
- Упростить геометрию до полилинии, используя GetFlattenPathGeometry()
- Преобразовать каждый отрезок линии в результирующей геометрии в трехмерный треугольник из (x, y, 0) в (0,0, z), где «z» - высота конуса.
- Создайте позиции и треугольные элементы MeshGeometry3D и установите для его материала значение SolidColorBrush с желаемой непрозрачностью.
Шаги 2-4 чрезвычайно просты.Шаг 1 может быть сложным с точки зрения выбора подходящей сторонней библиотеки трассировки растровых изображений и определения любого P / Invoke или COM-взаимодействия, необходимого для вызова его из C #.Используйте BitmapSource.CopyPixels, чтобы получить биты для передачи в библиотеку и построить геометрию из результата, используя открытую StreamGeometry (StreamGeometry.Open).