ウルトラ 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などのニュートラルな値に設定します。Bitmap.setGainmap()を呼び出して、変更したゲインマップを画像に適用します。
参考情報
ウルトラ HDR 画像の詳細については、以下の参考情報をご覧ください。