在我正在处理的应用程序中,有一些图像(System.Windows.Media.Imaging
的一部分)是在XAML页面的代码隐藏中动态创建的,并被添加到窗口中。我正在使用包含各种大小和位深度的ICO文件。我想要的大小是96x96 @ 32位。代码自动选择最大的大小(256x256 @ 32位)。
我正在设置Image.Source
属性,如下所示:
image.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/Images/Application.ico"));
现在,通过搜索我发现了Icon(System.Drawing
的一部分),它允许我设置一个字符串路径和大小,但这是一个完全不同的库的一部分。
new Icon("pack://application:,,,/Resources/Images/Inquiry.ico",96,96);
知道如何让我的Image尺寸属性更易于管理吗?谢谢!
编辑:
Convert System.Drawing.Icon to System.Media.ImageSource
此帖子使图像显得更小,但是,如果我将图标设置为96x96或128x128并不重要,它实际上不会更改显示图像的大小。我假设它的某个默认值与System.Windows.Media.Imaging
默认值不同。
答案 0 :(得分:1)
尝试在this answer to another SO question中发布的标记扩展程序。请注意使用BitmapDecoder
从Ico文件中获取所需的帧。
答案 1 :(得分:0)
您可以尝试使用以下代码,它应该适用于ICO文件:
Image displayImage = new Image();
// Create the source
BitmapImage sourceImage = new BitmapImage();
sourceImage.BeginInit();
sourceImage.UriSource = new Uri("pack://application:,,,/Resources/Images/Application.ico");
sourceImage.EndInit();
// Set the source
displayImage.Source = sourceImage;
// Set the size you want
displayImage.Width = 96;
displayImage.Stretch = Stretch.Uniform;
答案 2 :(得分:-1)
我没有尝试使用ico文件,我觉得这里很有用。
/// <summary>
/// Resizes image with high quality
/// </summary>
/// <param name="imgToResize">image to be resized</param>
/// <param name="size">new size</param>
/// <returns>new resized image</returns>
public Image GetResizedImage(Image imgToResize, Size size)
{
try
{
if (imgToResize != null && size != null)
{
if (imgToResize.Height == size.Height && imgToResize.Width == size.Width)
{
Image newImage = (Image)imgToResize.Clone();
imgToResize.Dispose();
return newImage;
}
else
{
Image newImage = (Image)imgToResize.Clone();
imgToResize.Dispose();
Bitmap b = new Bitmap(size.Width, size.Height);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(newImage, 0, 0, size.Width, size.Height);
g.Dispose();
return (Image)b;
}
}
return null;
}
catch (Exception e)
{
log.Error("Exception in Resizing an image ", e);
return null;
}
}