Ответ 1
Попробуйте расширение разметки, которое опубликовано в этом ответе на другой вопрос SO. Обратите внимание на использование BitmapDecoder
, чтобы получить требуемый кадр из файла Ico.
В приложении, над которым я работаю, есть изображения (часть System.Windows.Media.Imaging
), которые динамически создаются на основе кода страницы XAML и добавляются в окно. Я использую ICO файлы, которые содержат различные размеры и бит глубины. Размер, который я хочу, равен 96x96 @32 бит. Код автоматически выбирает самый большой размер (256x256 @32 бит).
Я устанавливаю свойство Image.Source
следующим образом:
image.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/Images/Application.ico"));
Теперь, выполнив поиск, я нашел значок (часть System.Drawing
), который позволит мне установить путь и размер строки, но это часть совершенно другой библиотеки.
new Icon("pack://application:,,,/Resources/Images/Inquiry.ico",96,96);
Любая идея, как я могу сделать свой размер изображения более управляемым? Спасибо!
EDIT:
Преобразовать System.Drawing.Icon в System.Media.ImageSource
В этом сообщении изображение становится меньше, однако не имеет значения, если я установил значок 96x96 или 128x128, он фактически не изменит отображаемый размер изображения. Я предполагаю, что это будет какое-то значение по умолчанию, которое отличается от System.Windows.Media.Imaging
по умолчанию.
РЕДАКТИРОВАТЬ РЕДАКТИРОВАНИЕ: Странно продолжает становиться более странным. Когда я показываю через оригинальный метод, он определенно отображает изображение как 256x256. Однако, когда я использую метод преобразования, описанный в ссылке, в то время как размеры меняются, они значительно уменьшаются (т.е. 256x256 выглядит ближе к 48x48).
Попробуйте расширение разметки, которое опубликовано в этом ответе на другой вопрос SO. Обратите внимание на использование BitmapDecoder
, чтобы получить требуемый кадр из файла Ico.
Вы можете попробовать со следующим кодом, он должен работать для файлов 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;
Я havent пытался с файлами 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;
}
}