С помощью HelixToolkit.SharpDX.Wpf как мне установить DiffuseMap для PhongMaterial из ImageSource? - PullRequest
0 голосов
/ 05 декабря 2018

Свойство DiffuseMap PhongMaterial принимает поток.

Если у меня есть ImageSource, как мне преобразовать его во что-то приемлемое для свойства?Обратите внимание, что мне нужно быть в состоянии сделать это быстро, в памяти.

В примерах исходного кода я могу найти только примеры загрузки изображений из файла:

var image = LoadFileToMemory(new System.Uri(@"test.png", System.UriKind.RelativeOrAbsolute).ToString());
this.ModelMaterial = new PhongMaterial
        {
            AmbientColor = Colors.Gray.ToColor4(),
            DiffuseColor = Colors.White.ToColor4(),
            SpecularColor = Colors.White.ToColor4(),
            SpecularShininess = 100f,
            DiffuseAlphaMap = image,
            DiffuseMap = LoadFileToMemory(new System.Uri(@"TextureCheckerboard2.dds", System.UriKind.RelativeOrAbsolute).ToString()),
            NormalMap = LoadFileToMemory(new System.Uri(@"TextureCheckerboard2_dot3.dds", System.UriKind.RelativeOrAbsolute).ToString()),
        };

LoadFileToMemory простоберет байты из файла и возвращает его как MemoryStream.

1 Ответ

0 голосов
/ 06 декабря 2018

Под ImageSource вы имеете в виду BitmapSource или DrawingImage?ImageSource - абстрактный базовый класс для них обоих.Если у вас есть BitmapSource, вы можете преобразовать его в MemoryStream, используя:

        private Stream BitmapSourceToStream(BitmapSource writeBmp)
        {
            Stream stream = new MemoryStream();

            //BitmapEncoder enc = new PngBitmapEncoder();
            //BitmapEncoder enc = new JpegBitmapEncoder();
            BitmapEncoder enc = new BmpBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(writeBmp));
            enc.Save(stream);                                             

            return stream;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...