【发布时间】:2013-03-15 19:39:50
【问题描述】:
我的数据库保存 byte[] 不同图像的数据,png 和 bmp 扩展工作正常,但奇怪的是带有 jpeg 扩展的图像似乎逆时针旋转了 90 度。我只能假设这是编码器和解码器的问题。 jpegs 由 iPhone 编码,并在 silverlight 应用程序中使用以下代码进行解码:
using (MemoryStream ms = new MemoryStream(bImage, 0, bImage.Length))
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(ms);
img.Source = bitmapImage;
tempList.Add(img);
}
对于bmps,我使用以下内容:
ExtendedImage image = new ExtendedImage();
var bmp = new BmpDecoder();
var png = new PngEncoder();
try
{
bmp.Decode(image, new MemoryStream(bImage));
}
catch (NotSupportedException)
{
new MessageWindow("Incorrect image format", DisplayStrings.ErrorDisplay, MessageButtons.OK, MessageImage.Error).Show();
continue;
}
MemoryStream ms = new MemoryStream();
png.Encode(image, ms);
BitmapImage bi = new BitmapImage();
bi.SetSource(new MemoryStream(ms.ToArray()));
img.Source = bi;
tempList.Add(img);
这两个选项都不会以正确的方向显示图像。我是否缺少特定的 jpeg 解码器类?
编辑 事实证明,iPhone 对字节数组做了一些奇怪的事情。结果:在保存之前旋转 iPhone 上的图像显然对 iPhone 上的图像没有任何作用,而是将图像的正确方向上传到服务器上。为什么会发生这种情况是任何人的猜测,但事实就是如此。
【问题讨论】:
-
问一个显而易见的问题:你怎么知道它们是旋转的?拍摄图像时,有时会将旋转信息放入 jpeg 本身的 cmets 部分,设备/图像查看器将自动旋转它以纠正方向。也许这就是正在发生的事情
-
我知道旋转是因为 iPhone 以正确的方向显示图像,但 Silverlight 图像显示的方向不正确。可能是自动旋转问题,你知道我该如何检查吗?
-
您必须将图像拉到另一台设备上,比如PC,然后在照片编辑器(例如MS Paint)中实际打开它。这将为您提供图像的“真实”方面,并告诉您这是否是自动旋转问题。很可能 Silverlight 正在“正确”显示它,但没有查看 jpeg 中包含的方向信息
-
感谢您的帮助,这是错误的字节数组,因为它们也显示为从我的电脑上的原始数据旋转而来 - iPhone 必须奇怪地上传它们
标签: c# image silverlight jpeg