使用 HelixToolkit.SharpDX.Wpf 如何在 ImageSource 的 PhongMaterial 上设置 DiffuseMap?
With HelixToolkit.SharpDX.Wpf how do I set the DiffuseMap on a PhongMaterial from an ImageSource?
PhongMaterial 的 DiffuseMap 属性 接受流。
如果我有 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 只是从文件中获取字节,returns 它作为 MemoryStream。
ImageSource 是指 BitmapSource 还是 DrawingImage? ImageSource 是它们两者的抽象基础class。
如果您有 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;
}
PhongMaterial 的 DiffuseMap 属性 接受流。
如果我有 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 只是从文件中获取字节,returns 它作为 MemoryStream。
ImageSource 是指 BitmapSource 还是 DrawingImage? ImageSource 是它们两者的抽象基础class。 如果您有 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;
}