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

ウルトラ HDR 画像形式は、デバイスでより明るく鮮やかな色の画像を表示できるように、明るさ情報をエンコードします。アプリでウルトラ HDR 画像を編集するときは、その輝度情報を保持する必要があります。これは、ユーザーのデバイスがウルトラ HDR 画像を最大輝度で表示することをサポートしていない場合でも重要です。ユーザーは、Ultra HDR 対応のデバイスを持つユーザーと画像を共有したり、その画像を保存して数年後に新しいデバイスで再び見たりする可能性があります。

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

画像の内容を変更する場合は、作業が難しくなります。このような場合、標準の編集方法では古い画像の明るさ情報が保持されますが、これは望ましい結果ではない可能性があります。その場合は、正しい結果を得るために、ゲインマップ(画像の明るさ情報をエンコードするマップ)を編集または削除する必要があります。

ウルトラ HDR 形式の概要

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

  • メイン画像には、画像の各ピクセルの色情報が含まれています。
  • ゲインマップは、プライマリ画像と同じアスペクト比の標準 JPEG 画像です(ピクセルサイズは同じとは限りません)。ゲインマップの各ピクセルは、プライマリ イメージの対応する部分の輝度を指定します。

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

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

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

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

  • 回転: ウルトラ HDR 画像を回転すると、このメソッドはゲインマップも回転します。
  • 切り抜き: ウルトラ HDR 画像を切り抜くと、このメソッドによりゲインマップが適切に切り抜かれます。
  • スケール: ウルトラ HDR 画像をスケーリングすると、このメソッドはゲインマップをスケーリングして、サイズ変更されたプライマリ画像の幅と高さを半分にします。

いずれの場合も、明るさの情報は保持されます。

ウルトラ HDR の高度な編集

ウルトラ HDR 画像に複雑な編集を加えると、ゲインマップは変更されず、望ましい結果が得られない可能性があります。

このような状況につながる一般的な編集は次のとおりです。

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

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

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

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

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

参考情報

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