多重解像度ビットマップの使用
FireMonkey はマルチプラットフォーム フレームワークである(Windows、iOS、OS X、Android に対応)ため、FireMonkey アプリケーションはさまざまな画面密度および画面解像度のデバイスで動作します。 FireMonkey 多重解像度ビットマップを使用すると、密度や解像度やプラットフォーム(Windows、iOS、OS X、Android)が異なっても、FireMonkey アプリケーションの画像やアイコンが正しく表示されます。 多重解像度ビットマップは、画像は同じだけれども倍率が異なるビットマップ項目を集めたものです。
ここでは、以下の用語を使用します。
- 画面密度: 画面の物理領域内のピクセル量。通常は dpi(dots per inch。インチあたりのドット数)と呼ばれます。たとえば、"低" 密度画面は、"標準" または "高" 密度画面に比べて、指定された物理領域内のピクセル数が少なくなります。
- 画面解像度: 画面上の物理ピクセルの総数です。画面密度と画面解像度は物理単位、つまりピクセルで測定されます。
- 倍率: FireMonkey では常に論理座標と論理サイズを使用します。多重解像度ビットマップを扱う際に、FireMonkey では、Scale プロパティを使って論理単位と物理単位の関係を見積もります。
Scale プロパティについて説明しましょう。たとえば、Apple では Retina ディスプレイ(2880×1800 ピクセル)を使用していますが、その密度および解像度は非 Retina ディスプレイの 2 倍です。その結果、アプリケーションを Mac App Store に提出するには、アイコン セット ファイルに非 Retina ディスプレイ用の解像度 512×512 ピクセルのアイコンが含まれていなければなりません。たとえば、このアイコンに Scale = 1
を使用するとします。Retina ディスプレイ用に、解像度 1024×1024 ピクセルのアイコンを追加しなければなりません。FireMonkey でこれらのアイコンがどちらも同じ論理サイズである場合、FireMonkey では 1024×1024 ピクセルのアイコンは Scale = 2
になります。このように、FireMonkey ツールで、異なる Scale を指定して、同じ論理サイズでありながら物理ピクセル数の異なる画像を用意します。
OS X プラットフォームと iOS プラットフォームの場合、少なくとも 1
と 2
の 2 つの倍率を提供するのが妥当です。 画面解像度は個々の画面のハードウェア特性であるため、さまざまな解像度を持つさまざまな種類のデバイスが存在するプラットフォームでは、必要な倍率がもっと多くなる可能性があります。 たとえば、Android プラットフォームでは、1
、1.33
、1.5
、2
などの倍率が必要になることがあります。
多重解像度ビットマップの基底クラスは TCustomMultiResBitmap です。TCustomBitmapItem は、TCustomMultiResBitmap コレクション内のビットマップ項目の基底クラスです。
多重解像度ビットマップは以下のコンポーネントで使用されます。
- TImage コントロール。TImage コントロールは、TFixedMultiResBitmap 多重解像度ビットマップを MultiResBitmap プロパティに保持します。TFixedMultiResBitmap は TCustomMultiResBitmap の下位クラスです。TFixedMultiResBitmap 多重解像度ビットマップには、さまざまな倍率のビットマップ項目を任意の数だけ格納できます。TImage は、各デバイス上で、表示するのに最適なビットマップを TFixedMultiResBitmap 多重解像度ビットマップ内のビットマップ コレクションから取得し、取得したビットマップを Bitmap プロパティで参照します。取得されるビットマップは、デバイスの解像度と、TFixedMultiResBitmap 多重解像度ビットマップに保存されているビットマップ項目の倍率によって変わります。特定の画面に必要な倍率ぴったりのビットマップ項目が多重解像度ビットマップに含まれていない場合、FireMonkey では、最も適した倍率のビットマップ項目を自動的に拡大または縮小します。このビットマップの取得方法については、Bitmap の説明を参照してください。それぞれのビットマップ項目が、すべてのプラットフォームにおいて、アプリケーションの実行可能ファイルのリソースを消費することを忘れないでください(たとえ、どれかのビットマップ項目が特定のプラットフォームで使用されることがなくても、リソースは消費されます)。
- TImageList 画像リスト。画像リストは、FireMonkey アプリケーションの GUI 要素(コントロールやメニューなど)で小さい画像の一元的なコレクションを使用するためのあらゆる機能を備えたツールとなります。画像リストは、多重解像度ビットマップを使ってソース画像を表し、そこから表示可能な最終画像を生成します。生成された最終画像も、多重解像度ビットマップとして表現されます。詳細は、「画像の一元的なコレクションとしての TImageList 画像リストの使用」を参照してください。
- IGlyph インターフェイス。IGlyph には、画像リストの管理に使用される基本的なメソッドとプロパティが宣言されています。TCustomButton、TCustomListBox、TTabControl、TTreeViewItem、TMenuBar などの多くのコンポーネントは、IGlyph インターフェイスをサポートしているため、多重解像度ビットマップを使用できます。
- TGlyph コントロール。TGlyph コントロールは、IGlyph インターフェイスをサポートし、画像リストの管理に使用されるメソッドやプロパティを実装しています。TGlyph では、Images、ImageIndex、AutoHide の各プロパティが published と宣言されていて、[オブジェクト インスペクタ]で編集することができます。Images は TCustomImageList 画像リストを参照し、ImageIndex はそのリスト内の具体的な画像を特定します。画像は、コントロールの領域にぴったりと合うように拡大/縮小されます。TGlyph 要素は、ほとんどのスタイル付きコントロール(TButton、TTabControl、TMenuItem など)に含まれています。
MultiResBitmap エディタを使用すると、TFixedMultiResBitmap 多重解像度ビットマップを作成できます。
TFixedMultiResBitmap 多重解像度ビットマップ内のビットマップ項目は TFixedBitmapItem 型です。TFixedBitmapItem ビットマップ項目には Fixed プロパティがあります。Fixed = True
のビットマップ項目は必須項目です。デフォルトでは、それぞれの多重解像度ビットマップには、Scale = 1
で名前が Normal
の必須(デフォルト)ビットマップ項目が少なくとも 1 つ含まれています。
MultiResBitmap エディタでは、必須ビットマップ項目を削除したり、必須ビットマップ項目の Scale を変更することはできません。グローバル メソッド RegisterScaleName を使って、必須ビットマップ項目(および倍率)を追加できます。
関連項目
- FMX.MultiResBitmap.TCustomMultiResBitmap
- FMX.MultiResBitmap.TCustomBitmapItem
- FMX.Objects.TImage
- FMX.Objects.TImage.Bitmap
- FMX.MultiResBitmap.TFixedMultiResBitmap
- FMX.MultiResBitmap.TFixedBitmapItem
- FMX.MultiResBitmap.TCustomBitmapItem.Fixed
- FMX.MultiResBitmap.TFixedBitmapItem.Scale
- FMX.MultiResBitmap.RegisterScaleName