WPF通过代码错误加载jpg图像 - BitmapMetadata在BitmapImage上不可用

时间:2014-11-14 01:47:49

标签: wpf image c#-4.0

非常沮丧。

我只是通过代码加载jpg图片时出现问题。如果我在XAML中加载它们,则正确加载相同的图像。 e.g:

<Image Source="Assets/Images/Backgrounds/ChangeSelectionImg.jpg" />

但是这段代码并没有加载相同的图片,但是对于PNG图片效果很好:

var uriSource = new Uri(@"C:\Work\TestApp\Assets\Images\Backgrounds\ChangeSelectionImg.jpg", UriKind.Absolute);

var bmi = new BitmapImage();
bmi.BeginInit();
bmi.CacheOption = BitmapCacheOption.OnLoad;
bmi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bmi.UriSource = uriSource;
bmi.EndInit();
var image = new Image
{
    Width = 187,
    Height = 700,
    StretchDirection = StretchDirection.DownOnly,
    Stretch = Stretch.Fill,
    Source = bmi
};

SpImage.Children.Add(image);

我还没有尝试使用Relative URI,因为我要加载的实际图像是应用程序外部的文件夹。图像路径将在数据库中指定。

甚至按照建议here尝试了BitmapCreateOptions.IgnoreColorProfile选项,但这也不起作用。

以下代码适用于PNG图像,但不适用于jpg:

var imagePath = "some absolute path to an image";
var uriSource = new Uri(imagePath, UriKind.Absolute);

var image = new Image
{
    Width = 187,
    Height = 700,
    StretchDirection = StretchDirection.DownOnly,
    Stretch = Stretch.Fill,
    Source = new BitmapImage(uriSource)
};

我现在失去了想法。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

因为我无法弄清楚为什么会这样,没有人帮忙:( 为了防止其他人以同样的方式陷入困境,我决定这样做:

var bannerImg = new ImageBrush(new BitmapImage(uriSource))
{
    Stretch = Stretch.Uniform
};

SpImage.Background = bannerImg;

我将StackPanel的背景图像设置为图像。

我仍然愿意接受建议。

答案 1 :(得分:0)

BitMapImage不支持BitMapMetaData,它抛出System.NotSupported异常,使用JpegBitmapDecoder将解决此问题。