JPEG の画像サイズを知る
サンプルプロジェクト Image_get_jpegsize.zip
WP7 では、2048px を超える UIElement の表示は出来ません。
例えば 2048×2048ピクセル以上の画像を Image や BitmapImage に読み込むと、読み込まれた時点でオートダウンサンプリング(自動的に縮小)されてしまいます。(ちなみに TextBlock に長文テキストを表示すると、2048px 以降の文字がぶっちぎれます)
オートダウンサンプリングされてしまうと言うことは、元々の画像サイズが分からないと言うことです。
何らかの事情で元々の画像サイズが必要な場合は、@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; }
参照
- Image Tips for Windows Phone 7
http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx