C# 从文件流读取图像时,图像会翻转-90
我正在尝试将本地路径中的图像加载到Silverlight图像控件。这是一个浏览器外应用程序。当我使用流加载图像时,它总是上下颠倒 知道为什么吗?这种情况仅适用于大型图像C# 从文件流读取图像时,图像会翻转-90,c#,silverlight,silverlight-4.0,filestream,C#,Silverlight,Silverlight 4.0,Filestream,我正在尝试将本地路径中的图像加载到Silverlight图像控件。这是一个浏览器外应用程序。当我使用流加载图像时,它总是上下颠倒 知道为什么吗?这种情况仅适用于大型图像 FileName这里给出了本地文件系统的完整路径,如C:\imageFullPath\image.jpg 请帮忙。下面是代码 ------在模型侧------------------ public BitmapImage DisplayImage { get { if (!string.IsNul
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视图侧------------------------
<Image Source="{Binding DisplayImage, Mode=TwoWay}" Width="450" Height="250" Margin="0,0,0,0"/>
调试时看到的内容
BMP
的像素从下到上的顺序相反,但可以在文件头中使用负高度来指示图像是从上到下存储的,因此您可能有这样的图像
这是发生在所有图像上,还是只发生在那个图像上
您可以尝试更改加载图像的方式,在构造函数中使用Uri
,而不是使用流调用SetSource()
,因为它可能会解释头并以不同的方式读取文件:
var b = new BitmapImage(new Uri(FileName));
return b;
或者,如果这没有帮助,您可以翻转每个图像,但这并不能解决根本问题:
<Image Source="{Binding DisplayImage, Mode=TwoWay}" Width="450" Height="250" Margin="0,0,0,0">
<Image.RenderTransform>
<ScaleTransform ScaleY="-1" />
</Image.RenderTransform>
</Image>
感谢您的回复。这种情况只会发生在大图像上,不仅是这个图像,还有每个大图像。我已经尝试了第一种方法var b=new-BitmapImage(新Uri(文件名));但这只是返回空图像。第二个对我来说并不实用,因为我必须在模型方面而不是在xaml中决定所有这些。还有其他想法吗?