【问题标题】:Dynamically Fill Ellipse with png/jpg image? ImageBrush not helpful, URI not working用 png/jpg 图像动态填充椭圆? ImageBrush 没有帮助,URI 不起作用
【发布时间】:2017-06-22 06:16:11
【问题描述】:

好的,所以我已经阅读了这里的一些问题,所有这些问题的答案都相同或相似,我正在尝试从代码中将图像插入到椭圆中。

ImageBrush ib = new ImageBrush();
        ib.ImageSource = new BitmapImage(new Uri("Art/image.png", UriKind.Relative));
        Sun.Fill = ib;

使用此代码没有任何反应,我会出现黑屏并丢失一些对象。 我已经更改了代码,删除了UriKind,将其更改为absolute,更改为RelativeOrAbsolute,我尝试使用@"Art\image.png"。所有加起来都是一样的。 但是当我在 XAML 中执行此操作时,它可以工作。 这个问题有解决办法吗?

【问题讨论】:

    标签: c# wpf png jpeg imagebrush


    【解决方案1】:

    使图像文件成为程序集资源。这比拥有单独的内容文件更实用。

    文件image.png 应位于Visual Studio 项目中名为Art 的文件夹中,并且它的Build Action(在文件的属性中)应设置为Resource

    然后您将使用Resource File Pack URI 访问该文件:

    ib.ImageSource = new BitmapImage(new Uri("pack://application:,,,/Art/image.png"));
    

    【讨论】:

    • @Ramin 这两个代码都有效,我只是不明白资源和内容之间的区别,所以我实际上不知道该选择哪个,我是 wpf 中的图像新手,会你有耐心给我解释一下吗? :)
    • 程序集资源文件嵌入到程序集中,而内容文件是复制到输出目录的单独文件,并且必须在潜在的应用程序安装期间复制到那里。对于正常大小的图像文件,汇编资源是更好的选择。这是在 WPF 应用程序中管理图像文件的“典型”方式。
    • 我认为这是您的应用程序的问题。这个link 提供了解释。
    • 请注意,即使您有内容文件,您仍然可以通过 Pack URI 加载它。请参阅 Pack URIs in WPF 中的 内容文件包 URI 部分。因此,无论哪种情况,您都应该使用 Pack URI。
    • 想了想,读了一点,我将使用 Clemens 的答案,简单地说,对于我的应用程序,我需要它在相同的组件中,tnx Ramin 的答案,对不起,我希望我可以为这两个答案投票:/
    【解决方案2】:

    这行得通:

    var d = new System.Windows.Shapes.Ellipse();
    ImageBrush ib = new ImageBrush();
    ib.ImageSource = new System.Windows.Media.Imaging.BitmapImage(new Uri("images/error.png", UriKind.Relative));
    d.Fill = ib;
    
    this.Content = d; // assuming the parent is a Window
    

    注意两点:

    1. images 目录中有一个名为 error.png 的图像
    2. 单击图像文件并在属性窗口中,将 Build Action 设置为 Content,并将 Copy to Output Directory 设置为 始终复制

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 1970-01-01
      相关资源
      最近更新 更多