• 追加された行はこの色です。
  • 削除された行はこの色です。
#setlinebreak(on);
[[WP TIPS に戻る>wp7/tips]]

*JPG の画像サイズを知る [#yce3ac1a]
*JPEG の画像サイズを知る [#yce3ac1a]
サンプルプロジェクト [[Image_get_jpegsize.zip>https://skydrive.live.com/redir.aspx?cid=793b87c06d2f0cd5&resid=793B87C06D2F0CD5!1896&parid=793B87C06D2F0CD5!223]]

WP7 では、2048px を超える UIElement の表示は出来ません。
例えば 2048×2048ピクセル以上の画像を Image や BitmapImage に読み込むと、読み込まれた時点でオートダウンサンプリング(自動的に縮小)されてしまいます。(ちなみに TextBlock に長文テキストを表示すると、2048px 以降の文字がぶっちぎれます)
オートダウンサンプリングされてしまうと言うことは、元々の画像サイズが分からないと言うことです。

#ref(Image_get_jpegsize-01.png,nolink);

何らかの事情で元々の画像サイズが必要な場合は、@7shi さんが公開されている方法で JPEG ファイルそのものを解析してサイズを取得しましょう。

 // 
 // 七誌さんのコードを IsolatedStorage に対応させた
 // http://d.hatena.ne.jp/n7shi/searchdiary?word=%2A%5BJPEG%5D
 // 
 public static Size GetJpegSize(string jpg)
 {
    using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var stream = iso.OpenFile(jpg, FileMode.Open))
        {
            return GetJpegSIze(stream);
        }
    }
 }
 
 public static Size GetJpegSIze(Stream stream)
 {
    var buf = new byte[8];
    while (stream.Read(buf, 0, 2) == 2 && buf[0] == 0xff)
    {
        if (buf[1] == 0xc0 && stream.Read(buf, 0, 7) == 7)
            return new Size(buf[5] * 256 + buf[6], buf[3] * 256 + buf[4]);
        else if (buf[1] != 0xd8)
        {
            if (stream.Read(buf, 0, 2) == 2)
                stream.Position += buf[0] * 256 + buf[1] - 2;
            else
                break;
        }
    }
 
    return Size.Empty;
 }


**参照 [#mab09285]
-画像サイズを取得
http://d.hatena.ne.jp/n7shi/20110204/1296891184

-Image Tips for Windows Phone 7
http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx