【Windows ストア アプリ開発】 画像は scale-100 が基本! しかし、 scale-100 を入れたくないときは…!? (あるいは「アプリ バンドルについて」)
Windows 8.1 のストア アプリでは、
- scale-100 の画像を用意するのが基本
- 高解像度デバイスの増加を考えると、scale-180 を追加しておくのが望ましい
- アプリ バンドルにしないのなら、 scale-100 を入れなくても OK
■ scale-100 の画像を用意するのが基本
これはいいですよね? VS2013 で Windows ストア アプリのプロジェクトを生成すると、自動的に scale-100 のタイルが生成されます。
これが基本です。
■ 高解像度デバイス対応
Windows ストア アプリの画像は、 次のスケールがサポートされてます。
80% | ○オプション |
100% | ◎標準 |
140% | ○オプション |
180% | ○オプション |
で、 例えば Surface Pro 3 の画面は 2160×1440ピクセルになっていて、 scale-140 で表示されます。 また、 scale-180 で表示される機種もあります。
※ 「Windowsの画面スケーリングを きちんと理解しよう」 p.13
それらの機種では、 scale-100 の画像を与えた場合は自動的に拡大表示されるわけですが、 それではボケた画像になってしまいます。
次の 2つの画像は、@IT の記事 「WinRT/Metro TIPS:解像度が変わっても画像をシャープに表示するには?[Win 8]」 より。
※ scale-100 の画像が scale-180 に拡大された場合
※ scale-180 の画像 (斜線や円弧のエッジに注目)
逆に、scale-180 を与えて、それが scale-140 に縮小されても、さほど気になりません。
というわけで、 「scale-180 を追加しておくのが望ましい」。
■ アプリ バンドル
VS2013 で Windows ストア アプリのパッケージを作るとき、 デフォルトでは必要な場合にアプリ バンドルが自動的に生成されます。
アプリ バンドルとは何かというと、 1つのパッケージを複数に分割しておき、 デバイスに必要な部分だけダウンロードさせるものです。
これにより、 ムダなダウンロードを減らせます。
例えば、 「クラウディアさんタイマー」のアプリ バンドルを覗いてみると、 こんなふうです。
※ パッケージは zip ファイルになっています。 拡張子を .zip に変えてやれば、 エクスプローラーで中を覗けます。
◇ ストアにアップロードするパッケージ (*_bundle.appxupload)
◇ .appxbundle の中身
このアプリの場合は、4つのパッケージ (*.appx) が 1つにバンドルされています。
*_AnyCPU.appx は「アプリ パッケージ」/「メイン パッケージ」などと呼ばれます。
*_AnyCPU.appx は必ずダウンロードされます。 CPU 別にバイナリを作った場合は、 *_x86.appx パッケージや *_amd64.appx パッケージなどとなり、 デバイスの CPU に合ったメイン パッケージだけがダウンロードされます。
*_scale-180.appx や *_language-ja.appx などは「リソース パッケージ」と呼ばれます。 言語、画像スケール、Microsoft DirectX 機能レベルなどによって、 リソースがまとめられています。
これは、 デバイスが必要とするものだけがダウンロードされます。 例えば、 scale-140 のデバイスでは *_scale-140.appx を、 (メイン パッケージに追加して) ダウンロードします。
ここで、メイン パッケージの Assets フォルダーを覗いてみましょう。
◇ メイン パッケージの中身
メイン パッケージには、scale-140 や scale-180 の画像は含まれていません。
それらのスケールの画像は、 個別のリソース パッケージに入っています。
そして、 デバイスがサポートしていないスケールの画像のリソース パッケージはダウンロードしません。
この例では、 メイン パッケージは 4MB。 対して、 画像のリソース パッケージは、 それぞれ 500KB 超。 従来のパッケージだと 5MB 以上になったはずですが、 このバンドルならば、 例えば scale-100 のデバイスでは 4MB、 あるいは scale-180 のデバイスでは 4.5MB 強のダウンロードで済むわけです。
さて。
ということは、 scale-180 の画像だけを提供した場合には (メイン パッケージに入る画像はありませんから)、 scale-100 のデバイスには画像がインストールされない、 ということになります。
これはマズいですね。 そこで、 最新の VS2013 では、 そのような状態 (scale-180 の画像だけを提供) のときにパッケージを作ろうとすると、 (アプリ バンドルを自動生成する条件が満たされているときは) 次の画像のようにエラーとして弾くようになっています。
これを回避しつつ、 scale-180 の画像だけを提供したいときには、 強制的にアプリ バンドルを作らせないようにします。
ということで、 「アプリ バンドルにしないのなら scale-100 を入れなくても OK」 です。
(ただし、 ダウンロード サイズは大きくなる!)
※ ちなみに、 バンドルをアップロードすると、 自動的に (というか、勝手にw) 「年.月日.…」 という形式のバージョン番号が振られます。
■ アプリ バンドルを手動で作成する
不可能ではないっぽいです。
AppxBundleManifest.xml を手書きして、 メイン パッケージに scale-180 だけを含めるようにして、 バンドルを手動で作成すれば、 scale-180 の画像だけを提供するアプリ バンドルがたぶん出来上がるでしょう。
※ 自動生成された AppxBundleManifest.xml の例
(メイン パッケージには scale-100 が含まれるという記述になっている。 ここを 180 に書き換えれば…)
手動でバンドルを作る手順がなんだか超絶めんどくさそうだし、 AppxBundleManifest.xml の書式もよくわからないので、 お勧めはしません (っていうか、不毛な気がするw)。
MSDN: App packager (MakeAppx.exe)
MSDN: アプリ パッケージと展開 (Windows ランタイム アプリ)
MSDN: アプリのパッケージ化 - アプリ バンドル
MSDN: Block
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「* プログラミング ( Metro スタイル )」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
- 【#UWP】 15063用の Acrylic Effect を、ちゃんと実装してみる(2017.08.05)
この記事へのコメントは終了しました。
コメント