【发布时间】:2023-03-08 09:23:01
【问题描述】:
我相信我正在做的事情是相当标准的。我通过在资源上调用 GetManifestResourceStream 从嵌入式资源创建一些图像,并为其提供 .ico 文件的路径:
Bitmap bmp = new Bitmap(Assembly.GetEntryAssembly().GetManifestResourceStream("MeterView.Resources.unlocked.ico"));
然后使用位图在我的表单上显示图像。这在 Windows 7 和 8 上一直运行良好,但现在当我尝试在 XP SP3 框上运行应用程序时,我在将流转换为位图的行上出现“无效参数”。我也尝试使用 Image.FromStream,但结果相同。
对资源的构建操作设置为嵌入式资源。任何人都知道如何解决这个问题?我也试过重置流,也没什么区别。
提前感谢您的任何建议。
图标文件来自这个应用程序的原始版本,它是用 Visual Basic 为 XP 编写的。我相信它们是在 VB 中手动生成的。我已经回收了所有这些图标,以便用 C# 重写这个应用程序。这是我第一次遇到问题。
【问题讨论】:
-
这些ICO文件是从哪里来的?他们有什么类型的内容? Windows Vista 在 ICO 文件中引入了对 PNG 的支持,通常用于较大的图标(例如 256x256)
-
如果我没记错的话,XP 不支持新的基于 PNG 的 ICO 文件。你可以使用这种新格式的 ICO 吗?
-
这些图标文件创建于 2003 年,是为 XP 和更早的系统开发的。
-
您是否有可能运行不同版本的框架?
-
1:确保您的 windows xp 是最新的,而不是等待 .net 更新。 2:将您的代码分成几行,
GetManifestResourceStream一个,new Bitmap()另一个..etc,并逐步通过调试器查看错误的确切位置,是在加载流还是尝试创建图像。
标签: c# stream windows-xp gdi+ embedded-resource