当从文件流中读取图像时,翻转-90

时间:2013-12-17 18:04:19

标签: c# silverlight silverlight-4.0 filestream

我正在尝试将图像加载到Silverlight图像控件的本地路径中。这是一个浏览器外的应用程序。当我使用流加载图像时,它总是颠倒翻转。

知道为什么吗?这仅适用于大图像。

FileName这里提供了本地文件系统的完整路径,例如C:\imageFullPath\image.jpg

请帮忙。以下是代码。

------在模型方面------------------------

public BitmapImage DisplayImage
{
    get
    {
        if (!string.IsNullOrWhiteSpace(FileName))
        {
            var b = new BitmapImage();
            b.SetSource(System.IO.File.OpenRead(FileName));                     
            return b;
        }
        return null;
    }
}

------在Silverlight View中------------------------

<Image Source="{Binding DisplayImage, Mode=TwoWay}" Width="450" Height="250" Margin="0,0,0,0"/>

调试时看到的内容

enter image description here

1 个答案:

答案 0 :(得分:0)

BMP normally stored "upside-down"的像素从底部到顶部的顺序相反,但可以在文件标题中使用负高度来表示图像是从上到下存储的,所以也许你有这样的形象。

这种情况会发生在所有图像上,还是只发生在那个图像上?

您可以尝试使用构造函数中的Uri更改图片的加载方式,而不是使用SetSource()调用Stream,因为它可能会占用标题并阅读文件不同:

var b = new BitmapImage(new Uri(FileName));                    
return b;

或者,如果这没有帮助,您可以apply a transform翻转每张图片,但这并不能解决根本问题:

<Image Source="{Binding DisplayImage, Mode=TwoWay}" Width="450" Height="250" Margin="0,0,0,0">
    <Image.RenderTransform>
        <ScaleTransform ScaleY="-1" />
    </Image.RenderTransform>
</Image>