从嵌入图像生成BitmapSource

6

我的目标是在WPF窗口中的重写OnRender方法中绘制嵌入资源的图像“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?

2个回答

14
你可以通过设置 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;    
}

话虽如此,通常您会从资源文件包 URI中创建 BitmapImage,例如:

new BitmapImage(new Uri(
    "pack://application:,,,/KisserConsole.someImage.png"));

4
您可以尝试使用以下内容:
Uri uri = new Uri( $"pack://application:,,,/YourAssemblyName;component/Resources/images/photo.png", UriKind.Absolute );

BitmapImage bitmap = new BitmapImage( uri );

请确保图像文件的“生成操作(Build Action)”设置为“资源(Resource)”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接