来自嵌入图像的 BitmapSource
BitmapSource from embedded image
我的目标是在重写的 OnRender 方法中在 WPF window 上绘制图像 "someImage.png",这是嵌入式资源:
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawImage(ImageSource, Rect);
}
我找到了将我的图像从资源获取到流的代码:
public BitmapSource GetSourceForOnRender()
{
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream("KisserConsole.someImage.png");
// What to do now?
return //BitmapSource
}
但是我现在如何获取或创建 BitmapSource?
您可以通过设置其 StreamSource
属性:
从流创建一个 BitmapImage
public BitmapSource GetSourceForOnRender()
{
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var bitmap = new BitmapImage();
using (var stream =
assembly.GetManifestResourceStream("KisserConsole.someImage.png"))
{
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
}
return bitmap;
}
也就是说,您通常会从 Resource File Pack URI 创建一个 BitmapImage,例如
new BitmapImage(new Uri(
"pack://application:,,,/KisserConsole.someImage.png"));
你可以试试这个:
Uri uri = new Uri( $"pack://application:,,,/YourAssemblyName;component/Resources/images/photo.png", UriKind.Absolute );
BitmapImage bitmap = new BitmapImage( uri );
确保图像文件的构建操作设置为资源。
我的目标是在重写的 OnRender 方法中在 WPF window 上绘制图像 "someImage.png",这是嵌入式资源:
protected override void OnRender(System.Windows.Media.DrawingContext drawingContext)
{
base.OnRender(drawingContext);
drawingContext.DrawImage(ImageSource, Rect);
}
我找到了将我的图像从资源获取到流的代码:
public BitmapSource GetSourceForOnRender()
{
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream("KisserConsole.someImage.png");
// What to do now?
return //BitmapSource
}
但是我现在如何获取或创建 BitmapSource?
您可以通过设置其 StreamSource
属性:
public BitmapSource GetSourceForOnRender()
{
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var bitmap = new BitmapImage();
using (var stream =
assembly.GetManifestResourceStream("KisserConsole.someImage.png"))
{
bitmap.BeginInit();
bitmap.StreamSource = stream;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.EndInit();
}
return bitmap;
}
也就是说,您通常会从 Resource File Pack URI 创建一个 BitmapImage,例如
new BitmapImage(new Uri(
"pack://application:,,,/KisserConsole.someImage.png"));
你可以试试这个:
Uri uri = new Uri( $"pack://application:,,,/YourAssemblyName;component/Resources/images/photo.png", UriKind.Absolute );
BitmapImage bitmap = new BitmapImage( uri );
确保图像文件的构建操作设置为资源。