代码之家  ›  专栏  ›  技术社区  ›  JBryanB

从动态加载的DLL加载图像

  •  0
  • JBryanB  · 技术社区  · 5 年前

    我的目标是在WPF窗口的overridedonrender方法中绘制图像“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    
    

    }

    0 回复  |  直到 9 年前
        1
  •  9
  •   Clemens    9 年前

    可以通过设置流的位图图像 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

    new BitmapImage(new Uri(
        "pack://application:,,,/KisserConsole.someImage.png"));
    
        2
  •  0
  •   Setyo N    6 年前

    您可以尝试使用:

    Uri uri = new Uri( $"pack://application:,,,/YourAssemblyName;component/Resources/images/photo.png", UriKind.Absolute );
    
    BitmapImage bitmap = new BitmapImage( uri );