【问题标题】:Jpegs Rotated when Attempting to Decode from Byte Array to Display as Silverlight Image尝试从字节数组解码以显示为 Silverlight 图像时 Jpeg 旋转
【发布时间】:2013-03-15 19:39:50
【问题描述】:

我的数据库保存 byte[] 不同图像的数据,pngbmp 扩展工作正常,但奇怪的是带有 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


【解决方案1】:

通过在将字节数组上传到服务器之前在 iPhone 上旋转图像来解决。这会以正确的方向保存图像,并且显然不会与 iPhone 上的原始图像产生明显差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 2013-08-07
    • 2013-10-08
    • 2012-12-24
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2021-04-21
    相关资源
    最近更新 更多