0

私のDBには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 上の画像には何も見えませんが、画像の正しい向きがサーバーにアップロードされます。なぜこれが起こるのかは誰の推測でもありますが、そうです。

4

1 に答える 1

0

バイト配列をサーバーにアップロードする前にiPhoneで画像を回転させることで解決しました。これにより、画像が正しい向きで保存され、iPhone 上の元の画像との目に見える違いは明らかに発生しません。

于 2013-03-15T11:39:50.753 に答える