ウルトラ HDR 画像を編集する

ウルトラ HDR 画像形式は輝度情報をエンコードし、デバイスは、より明るい色で明るい画像を表示できるようにします。アプリでウルトラ HDR 画像を編集するときは、その輝度情報を必ず保持する必要があります。これは、ユーザーのデバイスがウルトラ HDR 画像をフル強度で表示できない場合でも重要です。結局のところ、ユーザーはウルトラ HDR をサポートするデバイスを持っているユーザーと自分の画像を共有することもあれば、その画像を保存して何年も経って新しいデバイスで再度見ることもあります。

Android でビットマップを編集する方法のほとんどは、ウルトラ HDR 画像形式をサポートしています。画像の切り抜きや回転など、画像の基本的な編集を行うと、Android の標準的なメソッドで処理が実行され、新しいサイズや向きの超 HDR 画像が作成されます。

画像の内容を変更する場合は、このジョブは複雑になります。そのような場合、標準の編集方法では古い画像の明度情報が保持されるため、適切でない場合があります。その場合、適切な結果を得るには、ゲインマップ(画像の明度情報をエンコード)の編集または削除が必要になることがあります。

ウルトラ HDR 形式の概要

ウルトラ HDR 画像形式について詳しくは、ウルトラ HDR 画像の仕様をご覧ください。理解すべき最も重要なことは、ウルトラ HDR 画像にはプライマリ画像とゲインマップの両方が含まれることです。

  • プライマリ画像には、画像の各ピクセルの色情報が含まれます。
  • ゲインマップは、プライマリ画像と同じ比率ですが、ピクセル寸法が必ずしも同じではない標準 JPEG 画像です。ゲインマップの各ピクセルは、プライマリ画像の対応する部分の輝度を指定します。

ゲインマップは、グレースケールまたはカラーのいずれかです。ゲインマップがカラーの場合、ゲインマップの各カラーチャネルは、プライマリ画像の対応する部分におけるそのカラーチャネルの輝度を指定します。ゲインマップがグレースケールの場合、ゲインマップの各ピクセルは、プライマリ画像の該当部分における 3 つのカラーチャネルすべての輝度を指定します。

ゲインマップは、プライマリ画像と同じ比率にする必要がありますが、ピクセル寸法が同じである必要はありません。実際、Android プラットフォームでウルトラ HDR 画像を作成すると、プライマリ画像よりも幅と高さが小さいゲインマップが作成されます。これにより、ファイルサイズは大幅に小さくなりますが、十分な情報をエンコードできるため、良い結果が得られます。つまり、ゲインマップの各ピクセルには、プライマリ画像内の複数のピクセルの輝度情報が格納されている場合があります。

ウルトラ HDR の基本的な編集

Android の Bitmap API を使用してウルトラ HDR 画像に基本的な変換を行う場合、メソッドによりゲインマップに適切な変更が行われます。次の Bitmap オペレーションがサポートされています。

  • 回転: ウルトラ HDR 画像を回転させると、ゲインマップも回転します。
  • Crop: ウルトラ HDR 画像を切り抜く場合、ゲインマップが適切に切り抜かれます。
  • 縮尺: ウルトラ HDR 画像をスケーリングする場合、ゲインマップはサイズ変更されたプライマリ画像の半分の幅と半分の高さになります。

いずれの場合も輝度情報が保持されます。

高度なウルトラ HDR 編集

ウルトラ HDR 画像に対してさらに細かい編集を行うと、ゲインマップは変更されずに保持されるため、期待する結果が得られない可能性があります。

このような状況を招く可能性がある一般的な編集には、次のようなものがあります。

  • ステッカーまたは絵文字の追加: 追加されたステッカーの明度と色の鮮やさの値は、貼り付けた領域と同じになります。
  • 2 番目の画像をオーバーレイする: 新しい画像には、オーバーレイされているコンテンツの明度と色の鮮明さの情報が使用されます。
  • フィルタの追加: 古いゲインマップの情報が、変更されたプライマリ画像に適していない場合があります。

いずれの場合も、古い輝度と色の鮮明さの情報が保持されますが、変更後の画像には適さない場合があります。

元のゲインマップが編集後の画像に適している場合は、何もする必要はありません。ゲインマップを変更する場合、通常のワークフローは次のようになります。

  1. Bitmap.getGainmap() を呼び出して画像の現在のゲインマップを取得し、キャッシュに保存します。
  2. 必要に応じてプライマリ イメージを変更します。
  3. キャッシュされたゲインマップに対応する編集を行います。たとえば、絵文字をプライマリ画像に貼り付けた場合、ゲインマップの対応する部分を Color.GRAY などのニュートラルな値に設定できます。

  4. Bitmap.setGainmap() を呼び出して、変更したゲインマップを画像に適用します。

参考情報

ウルトラ HDR 画像について詳しくは、以下の参考情報をご覧ください。