ウルトラ HDR 画像形式では、輝度情報がエンコードされるため デバイスでより明るく より鮮やかな色の画像を表示できます。アプリでウルトラ HDR 画像を編集する場合は、その輝度情報を保持する必要があります。ユーザーのデバイスがウルトラ HDR 画像を最大強度で表示できない場合でも、これは重要です。ユーザーは、ウルトラ HDR をサポートするデバイスを持っている人に画像を共有したり、画像を保存して数年後に新しいデバイスで再度見たりする可能性があるためです。
幸いなことに、ビットマップを編集するほとんどの Android メソッドは、ウルトラ HDR 画像形式をサポートしています。画像のトリミングや回転などの基本的な編集を行う場合は、標準の Android メソッドで処理できます。新しいサイズや画面の向きのウルトラ HDR 画像が作成されます。
画像の内容を変更する場合は、処理が複雑になります。このような場合、標準の編集メソッドでは、元の画像の輝度情報が保持されますが、これは望ましくない可能性があります。 このような場合は、ゲインマップ(画像の輝度情報をエンコードする)を編集または削除して、適切な結果を得る必要があるかもしれません。
ウルトラ HDR 形式の概要
ウルトラ HDR 画像形式については、ウルトラ HDR 画像 の仕様で詳しく説明されています。最も重要なことは、 ウルトラ HDR 画像にはプライマリ画像とゲインマップの両方が含まれていることです。
- プライマリ画像には、画像の各ピクセルの色情報が含まれています。
- ゲインマップは、プライマリ画像と同じ比率の標準 JPEG 画像です。ピクセル サイズは必ずしも同じではありません。 ゲインマップの各ピクセルは、プライマリ画像の対応する部分の輝度を指定します。
ゲインマップはグレースケールまたはカラーにできます。ゲインマップがカラーの場合、ゲインマップの各カラーチャンネルは、プライマリ画像の対応する部分のそのカラーチャンネルの輝度を指定します。ゲインマップがグレースケールの場合、ゲインマップの各ピクセルは、プライマリ画像のその部分の 3 つのカラーチャンネルすべての輝度を指定します。
ゲインマップはプライマリ画像と同じ比率にする必要がありますが、ピクセル サイズを同じにする必要はありません。実際、Android プラットフォームでウルトラ HDR 画像を作成する場合、プライマリ画像よりも幅と高さが小さいゲインマップが作成されます。これにより、ファイル サイズが大幅に小さくなりますが、十分な情報がエンコードされるため、良好な結果が得られます。つまり、ゲインマップの各ピクセルには、プライマリ画像の複数のピクセルの輝度情報が保存される可能性があります。
ウルトラ HDR の基本的な編集
Android Bitmap API を使用してウルトラ HDR 画像に基本的な変換を行う場合、メソッドはゲインマップに適切な
変更を加えます。次の Bitmap オペレーションがサポートされています。
- 回転: ウルトラ HDR 画像を回転させると、メソッドはゲインマップも回転させます。
- トリミング: ウルトラ HDR 画像をトリミングすると、メソッドはゲインマップを適切にトリミングします。
- スケーリング: ウルトラ HDR 画像をスケーリングすると、メソッドはゲインマップをスケーリングして、サイズ変更されたプライマリ画像の幅と高さの半分にします。
いずれの場合も、輝度情報は保持されます。
ウルトラ HDR の高度な編集
ウルトラ HDR 画像に複雑な編集を加えると、ゲインマップは変更されずに保持されるため、望ましい結果が得られない可能性があります。
このような状況になる可能性がある一般的な編集は次のとおりです。
- ステッカーや絵文字の追加: 追加されたステッカーは、貼り付けられた領域と同じ輝度と色の鮮やかさの値になります。
- 2 つ目の画像のオーバーレイ: 新しい画像は、オーバーレイするコンテンツの輝度と色の鮮やかさの情報を使用します。
- フィルタの追加: 古いゲインマップの情報が、変更されたプライマリ画像に適していない可能性があります。
いずれの場合も、古い輝度と色の鮮やかさの情報は保持されますが、変更された画像には適していない可能性があります。
元のゲインマップが編集後の画像に適している場合は、何もする必要はありません。ゲインマップを変更する場合は、通常は次のワークフローになります。
- 画像の現在のゲインマップを
Bitmap.getGainmap()を呼び出して取得し、キャッシュに保存します。 - 必要に応じてプライマリ画像を修正します。
キャッシュに保存されたゲインマップに、対応する編集を加えます。たとえば、プライマリ画像に絵文字を貼り付けた場合は、ゲインマップの対応する部分を
Color.GRAYなどのニュートラルな値に設定します。変更したゲインマップを画像に適用します by calling
Bitmap.setGainmap()。
参考情報
ウルトラ HDR 画像の詳細については、以下の参考情報をご覧ください。