Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF:使用.ico文件作为工具栏的图像?或者需要转换为XAML?_C#_Wpf_Xaml - Fatal编程技术网

C# WPF:使用.ico文件作为工具栏的图像?或者需要转换为XAML?

C# WPF:使用.ico文件作为工具栏的图像?或者需要转换为XAML?,c#,wpf,xaml,C#,Wpf,Xaml,我知道建议将图像转换为XAML,因为它们在更改dpi时会变得模糊 标准的ICO文件实际上是BMP文件呢 我需要在工具栏中使用这些。我是否需要将全部转换为XAML 有更好的办法吗 HTML中一个类似的功能叫sprites,它是一个大图像,但通过位置获取项目。基本上,当不需要缩放时,使用静态图像,当需要执行各种缩放时,使用矢量图像。这是大多数WPF和Silverlight应用程序的经验法则 但是,您不能直接将静态图像转换为矢量图像(您称之为XAML),而且大多数情况下,它需要设计师对矢量图像进行一些

我知道建议将图像转换为XAML,因为它们在更改dpi时会变得模糊

标准的ICO文件实际上是BMP文件呢

我需要在工具栏中使用这些。我是否需要将全部转换为XAML

有更好的办法吗


HTML中一个类似的功能叫sprites,它是一个大图像,但通过位置获取项目。基本上,当不需要缩放时,使用静态图像,当需要执行各种缩放时,使用矢量图像。这是大多数WPF和Silverlight应用程序的经验法则

但是,您不能直接将静态图像转换为矢量图像(您称之为XAML),而且大多数情况下,它需要设计师对矢量图像进行一些工作

使用矢量图像会使渲染过程更重,矢量越多,渲染过程越慢。当您将一个特定的可视树添加到屏幕上已有的内容时,它也会使实例化该树的速度变慢。如果调用RenderToBitmap并缓存要使用的矢量图像的大小,则可以克服此问题,但这需要传统的自定义代码


使用静态图像可以实现更快的渲染。但是,放大会导致像素化,缩小可能会导致图像上出现瑕疵。当您使用静态图像时,PNG被认为是首选格式,您可以完全控制压缩,您可以使用alpha键,并且它是一种索引格式,因此它的大小非常小。

我总是在可能的情况下将所有图像转换为
XAML
。我认为这是一个好规则。

我一直很幸运地从.ico文件中提取分辨率图标(请记住,.ico文件可以在一个文件中具有多个分辨率),并将其转换为.png或.gifWindows.ico之类的文件。ico文件不是.bmp文件。它们包含多个图像、遮罩、大小目录、颜色深度等。谢谢David!所以经验法则。。。我怎么知道它的规模?举个例子。。我想在用户名/密码文本框的左侧放置一个登录屏幕,显示一张48x48的锁/钥匙图片。如果DPI增加,这会扩大吗?我想如果DPI增加,一切都会扩大。很抱歉延迟响应。理想情况下,您希望所有内容都是WPF/Silverlight中的向量。如果你想要一个已经转换成XAML用户控件的好图标库,你可以戳我一下。如果您遇到性能问题,这主要是由于构建页面造成的,那么您将开始编写自定义代码来渲染tMap并缓存所显示内容的本地预渲染版本。