将图片源设置为应用程序文件夹

3
我想从特定路径获取一张图片,但该路径必须仅从应用程序的当前文件夹引用,而不是从本地C:驱动器引用。
我的原因是因为该应用程序即将发布,我不能将图像引用到我当前PC上相同的本地位置,因为该应用程序将在许多其他PC上使用,该路径在其他人的计算机上无法工作。
这是目前有效的路径:
SetDefaultImage(new Binary(File.ReadAllBytes("C:\\Users\\mclaasse\\Desktop\\Haze Update\\Haze\\Haze\\Icons\\user6.jpg")));

这是我需要的格式:

如下所示:

SetDefaultImage(new Binary(File.ReadAllBytes("Haze\\Icons\\user6.jpg")));

但是我遇到了以下错误:

找不到路径'C:\ Haze \ Icons \ user6.jpg'的一部分。

是否有简单的方法可以让我的路径工作?


你的答案可能在这里:https://dev59.com/JGQm5IYBdhLWcg3wtAw_#17405207 - Irwene
2
为什么不从程序集资源中加载图像? - Clemens
@Clemens 谢谢你的评论!我该如何从程序集资源中加载它? - CareTaker22
@CareTaker22 来自 MSDN :) https://msdn.microsoft.com/zh-cn/library/yf17tthe(v=vs.90).aspx。不过,如果您想要直接从标记中加载它,则还有其他解决方案,此时您应该阅读:https://dev59.com/Kmox5IYBdhLWcg3wIQ1o - Irwene
2个回答

2

不确定这是否恰好符合您的需求,但是假设您在Visual Studio项目中有一个图像文件user6.jpg,它位于名为Images的项目文件夹中,并且图像文件的Build Action设置为Resource,则可以从资源文件包URI中加载它:

var image = new BitmapImage(new Uri("pack://application:,,,/Images/user6.jpg"));

1

我尝试了所有参考资料,但它们都无法解决我的问题(我不知道为什么),但这个方法可以:

string directory = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
string filePath = Path.Combine(directory, "Icons\\user6.jpg");

然后检查你要寻找的文件是否存在:
if (!File.Exists(filePath))
{
    MessageBox.Show("The default image does not exist", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
else
{
    ...
}

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