#setlinebreak(on);
[[WP TIPS に戻る>wp7/tips]]
*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