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

ウルトラ 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 つ目の画像を重ねる: 新しい画像は、重ねるコンテンツの輝度と色の鮮やかさの情報を使用します。
  • フィルタを追加する: 古いゲインマップの情報が、変更されたプライマリ画像に適していない可能性があります。

いずれの場合も、以前の輝度と色の鮮やかさの情報は保持されますが、変更後の画像には適していない可能性があります。

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

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

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

参考情報

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