XGRIDSドキュメント
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel PortalCam シリーズ

    • PortalCam P1

      • 製品概要
      • デバイスの基本操作
      • LCC Scan App の使用
      • メンテナンスとお手入れ
      • FAQ
  • Lixel K シリーズ

    • Lixel K1

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • マップフュージョン
      • 典型的なシーンにおける経路計画の推奨
      • 注意事項
      • FAQ
    • Lixel K2

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得
      • マップフュージョン
      • 典型的なシーンにおける経路計画の推奨
      • 注意事項
      • FAQ
  • Lixel L シリーズ

    • Lixel L2 Pro

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標のポイントクラウドデータを取得する
      • 実時計測機能
      • 付録
      • FAQ
    • Lixel L3

      • 製品概要
      • デバイスの基本操作
      • デバイスのアクティベーションと接続
      • デバイス収集
      • 絶対座標点群データの取得
      • 付録
  • アクセサリー

    • Stick Light

      • 取り付けガイド
      • 基本操作
      • よくある質問
  • Lixel Studio

    • バージョンと著作権
    • インストールとアクティベーション
    • ソフトウェアインターフェース
    • ファイル操作
    • プロジェクト処理
    • ツール
    • 2D 作図
    • 業界応用
    • 設定
    • デバイス接続
    • よくある質問
  • Lixel CyberColor

    • LCC Studio

      • はじめに
      • バージョンと更新
      • ダウンロードとインストール
      • インターフェース概要とナビゲーション
      • 再構築前の準備
      • モデル再構築
      • 単一モデル再構築
      • 地図合成
      • 空地融合
      • 航空撮影再構築
      • マイモデル
      • その他の機能
      • 設定とアカウント
      • Converter
      • 動画再構築
      • よくある質問 / FAQ
    • LCC Scene Editor

      • バージョンと更新情報
      • アカウントとサインイン
      • 製品概要とホーム画面
      • エディター画面
      • ナビゲーションモード
      • ファイル
      • 設定
      • 編集
      • ウィンドウ
      • グローバルツールバー
      • アセットとプロパティ
      • 左ツールバー
      • ビューポイント
      • ポータル
      • スカイボックス
      • アノテーション
      • 測定
      • フライスルー
      • シーンレポート
      • 3D レイアウト
      • ミニマップ
      • プレビューモード(Viewer)
      • ヘルプ
      • よくある質問(FAQ)
      • スポーンポイント
    • LCC Model Editor

      • バージョンと更新
      • ユーザーガイド
      • 概要とインターフェース
      • ファイル操作
      • セレクター
      • モデルの編集
      • 測定
      • カラーグレーディング
      • アセット管理
      • 設定とヘルプ
      • よくある質問
    • Capture Guide

      • 概要
      • 撮影デバイス概要
      • 一般的な撮影の原則
      • 屋内シーンの撮影
      • 屋外シーンの撮影
      • 大規模撮影(マップフュージョン)
      • 空地マップフュージョン撮影
      • オブジェクト撮影
      • 人物撮影
      • ビデオ再構築撮影
      • HD Enhancement
      • 制御点(Lixel P1)
      • FAQ とトラブルシューティング
    • LCC Studio Linux

      • 製品概要説明
      • 基本アーキテクチャマニュアル
      • インストールと展開説明書
      • コンテナ起動パラメータ説明書
      • CodeMeter オフラインライセンス展開説明書
      • APIコマンドセット
      • 付録-開発者データマニュアル
      • 付録-エラーコード一覧
      • シングルノードマルチGPUクラスタ展開QuickStart
    • 活用テクニック

      • 複数の大規模 3DGS モデルの統合ワークフロー
    • バージョン履歴
  • プラグインと SDK

    • Unreal

      • 概要
      • クイックスタート - Windows
      • クイックスタート - Linux
      • クイックスタート - Quest3
      • エディションとライセンス
      • レンダリング
      • Tiled ラスタライズ(実験的機能)
      • 画面調節
      • 法線とライティング
      • シーン編集
      • パフォーマンスパラメーター
      • パフォーマンス最適化ガイド
      • サードパーティおよびエンジンプラグインとの連携
      • プロキシメッシュ
      • 読み込みアニメーション
      • コリジョン
      • ナビゲーションシステム対応
      • Single layer water 対応
      • ローカライズ
      • よくある質問
      • トラブルシューティング
      • ログと診断
      • お問い合わせ
      • ベストプラクティス

        • LixelStudio メッシュで 3DGS をリライティングする
      • API リファレンス

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • SOG / SPZ / PLY Actors
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • 更新履歴

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Unity SDK の概要
      • 技術的特徴
      • 開発環境の要件
      • PC クイックスタートガイド
      • プロジェクト設定の最適化ガイド
      • Pico 4 Ultra 開発ガイド
      • Pico 4 Ultra PC ストリーミングガイド
      • Quest 3 開発ガイド
      • Quest 3 PC ストリーミングガイド
      • OpenXR 開発ガイド
      • Pico 4 Ultra Business Streaming ガイド
      • 用語集
      • FAQ
      • お問い合わせ
      • 機能開発ガイド

        • 複数シーン混合レンダリング開発ガイド
        • 影の受光開発ガイド
        • リアルタイムライティング開発ガイド
        • マルチカメラレンダリング開発ガイド
        • 高解像度画像レンダリング開発ガイド
        • LCC / LCC2 データ形式互換性開発ガイド
        • 読み込みエフェクト開発ガイド
        • Mip レンダリングモード切り替え開発ガイド
        • エッジ・コーナースナップ開発ガイド
        • 投影デカール開発ガイド
        • ビデオ投影デカール開発ガイド
        • ハイライト開発ガイド
        • リアルタイムクリッピング開発ガイド
        • カラー調整開発ガイド
        • シーン Mesh データ取得開発ガイド
        • エディターモード開発ガイド
        • レンダリングパフォーマンスパラメータ設定ガイド
        • アプリケーションとデータの同梱パッケージ開発ガイド
        • コリジョンシステム開発ガイド
        • macOS 開発の権限問題ガイド
        • iOS デバイスのコンパイル・パッケージ化開発ガイド
      • API リファレンス

        • LCCManager
        • Renderer
        • データ型
      • 変更履歴

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • はじめに
      • レンダリング性能最適化ガイド
      • グラフィックス設定
      • よくある質問
      • API リファレンス

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • 更新履歴

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0

カラー調整開発ガイド

LCC Unity SDK は、3DGS シーンに対するハイライト、クリッピング、カラー調整などの編集操作に対応しています。このガイドでは、カラー調整操作を説明します。2D 投影テクスチャ、3D ジオメトリ、またはその組み合わせで領域を選択し、選択領域の明るさ、彩度、コントラストを調整します。通常選択と反転選択に対応しています。

注:

現在のカラー調整機能はランタイムの表示効果のみで、元のデータファイルを一切変更せず、編集結果の保存やエクスポートにも対応していません。データのカラー調整・クリッピング・保存が必要な場合は、XGRIDS LCC Editor ソフトウェアツールを使用してください。

データを変更したくない場合は、操作を記録しておき、次回データ読み込み完了後に再生(設定を実行)することもできます。

前提条件

SDK でシーンをカラー調整するには、以下の条件が必要です。

  1. データ読み込み前に編集状態に入る。 SDK はデフォルトで閲覧状態(View)で、最も高い性能を提供し、通常の閲覧に推奨されます。カラー調整などの編集操作を行うには、Load を呼び出す前に SetEditorMode(true) で編集状態に切り替えます。このメソッドはすべてのデータを読み込む前に呼び出した場合のみ有効です。
  2. データ読み込み完了後にカラー調整操作を行う。 カラー調整インターフェースは、シーンデータが完全に読み込まれた後に呼び出す必要があります。

手順 1:シーンをセットアップする

カラー調整に必要な GameObject をシーンに準備します。

  • Main Camera:シーンカメラ。2D カラー調整はそのビュー行列と投影行列を使用します。
  • LCCManager:Transform を正規化した空の GameObject で、LCCManager スクリプトを追加します。
  • LCCRenderer:Transform を Rotation.x = -90、Scale.x = -1 に設定した空の GameObject(LCC データ座標系にアライメント)で、後述の Tone スクリプトをアタッチします。
  • 3D 選択ジオメトリ(省略可):3D カラー調整の補助オブジェクト。この例では 1 つの Cube(Box1)を用意します。移動・スケーリングすると、3D カラー調整選択の位置とサイズを制御できます。

注:

レンダリングカメラ、LCCManager、LCCRenderer GameObject に関する設定は、PC クイックスタートガイド と プロジェクト設定の最適化ガイド の関連セクションを参照してください。

手順 2:データ構造を理解する

カラー調整は ToneMix データ構造を使用します。これは 2D テクスチャ選択と 3D ジオメトリ選択を同時に記述でき、カラー調整パラメータを保持します。使用する列挙型と構造体は以下のとおりです。

public enum SelectMode    { normal, invert, clip }  // 通常選択、反転、リアルタイムクリッピング
public enum OperationMode { normal, erase }         // 通常選択、選択の消去
public enum ShapeType     { box, sphere }           // 3D Box 選択、3D Sphere 選択
public enum EditType      { Edit2D, Edit3D }        // 2D 編集、3D 編集

// カラー調整選択
public struct ToneMix
{
    public EditType editType;       // 編集タイプ(必須。2D と 3D のどちらのフィールドを使うかを決定)
    public Texture2D texture;       // 2D マスクテクスチャ(Edit2D で使用)
    public Matrix4x4 mv;            // カメラのビュー行列(Edit2D で使用)
    public Matrix4x4 mvp;           // カメラのビュー投影行列(Edit2D で使用)
    public ShapeType type;          // ジオメトリタイプ(Edit3D で使用)
    public Matrix4x4 invMat;        // ジオメトリの逆行列(Edit3D で使用)
    public OperationMode operation; // 操作タイプ(Edit3D で使用)
    public SelectMode mode;         // 選択モード(必須)

    public float brightness;        // 明るさ。範囲 [0, 3]、デフォルト 1.0
    public float saturation;        // 彩度。範囲 [0, 3]、デフォルト 1.0
    public float contrast;          // コントラスト。範囲 [0, 3]、デフォルト 1.0
    public int lutid;               // LUT テーブルインデックス(予約)。0 は未使用
}

カラー調整リストについて注意すべき点は 3 つあります。

  1. リストは順序付きです。 2D でも 3D でも、リスト内のエントリは順番に有効になります。追加順が期待と一致することを確認してください。
  2. 反転にはカラー調整データが必要です。 これはカラー調整とハイライト/クリッピングの最も重要な違いです。ハイライト/クリッピングの反転は純粋なコマンドでデータとの関連付けは不要ですが、カラー調整の反転エントリは mode = SelectMode.invert に加えて、brightness、saturation、contrast も設定し、選択外領域のカラー調整効果を指定する必要があります。
  3. 1 つのリストの最大エントリ数は 255 です。 超えるとエラーコードが返ります。

手順 3:カラー調整 API を理解する

カラー調整関連のインターフェースはすべて LCCManager が提供します。SetTone メソッド 1 つと終了メソッド 1 つがあります。

SetTone

// 戻り値: int
// 0: 成功
// 1: リストが null または要素数 0
// 2: リスト要素が最大数 255 を超過
public int SetTone(List<ToneMix> _Mix)

選択領域のカラー調整を実行し、明るさ、彩度、コントラストの調整に対応します。2D テクスチャエントリと 3D ジオメトリエントリを同じリストに混在できます。

QuitToneMode

// 戻り値: void
public void QuitToneMode()

カラー調整モードを終了し、シーンの元のカラーを復元します。

ヒント:

カラー調整パラメータの切り替えや現在のカラー調整のクリア時は、先に QuitToneMode() を呼び出してから新しいカラー調整を設定します。

手順 4:2D マスクテクスチャ仕様

2D カラー調整はマスクテクスチャで選択を記述し、四角形、三角形、ブラシ、投げ縄などさまざまな選択方法に対応します。対応するピクセルをテクスチャ内で選択値としてマークするだけです。2D 操作を使用する場合、カメラをロックし、固定視点からテクスチャをマークする必要があります。テクスチャとピクセル値の規約は以下のとおりです。

  • テクスチャは 1024 × 1024 固定、R8 単一チャンネル、Mipmap なし、ポイントフィルタリング(FilterMode.Point)、クランプサンプリング(TextureWrapMode.Clamp)。
  • ピクセル値の規約:
ピクセル値意味
128デフォルト(未選択)
240選択済み
180選択解除(既選択領域の消去)
0クリッピング

カラー調整シナリオでは、通常 128(デフォルト)と 240(選択済み)の 2 つの値のみを使用します。

手順 5:スクリプトを書く

Tone.cs という名前の新しい C# スクリプトを作成します。まず基本の骨組みを完成させます。Start で編集状態に入りデータを読み込み、読み込み完了後に後続のカラー調整メソッドがチェックするための読み込みフラグを設定します。

using LCCCore;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Tone : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;
    public GameObject m_Box1;
    public Slider m_brightness;
    public Slider m_saturation;
    public Slider m_contrast;

    private LCCCore.Renderer m_renderer;
    private Camera m_camera;
    private bool m_isLoaded = false;

    void Start()
    {
        m_camera = Camera.main;
        m_manager.SetPlatformType(PlatformType.PC);

        // 編集モードに入る。Load の前に呼び出す必要がある
        m_manager.SetEditorMode(true);

        m_renderer = m_manager.GetRender(this.transform);
        if (m_renderer == null)
            Debug.LogError("GetRender に失敗しました。マネージャが正しく設定され、ファイルパスが有効か確認してください。");

        m_renderer.Load(m_FilePath, onLoadProgress, onLoadCallback);
    }

    private void onLoadProgress(float value)
    {
        Debug.Log($"読み込み進捗: {value}");
    }

    private void onLoadCallback()
    {
        Debug.Log("データが読み込まれました !!!");
        m_isLoaded = true;
    }

    // カラー調整メソッドを以下に追加
}

注:

SetEditorMode(true) は Load の前に呼び出さないと有効になりません。また SetTone はデータ読み込み完了後(onLoadCallback コールバック発火後)に呼び出す必要があります。3 つのスライダー m_brightness、m_saturation、m_contrast は実行時にカラー調整パラメータを動的に調整するために使用し、必要に応じて利用できます。

手順 6:スクリプトをアタッチしてプロパティを設定する

  1. Tone.cs スクリプトを LCCRenderer GameObject にアタッチします。
  2. Inspector ウィンドウで LCCManager GameObject をスクリプトの Manager プロパティへドラッグします。
  3. File Path プロパティに LCC ファイルパスを入力します。
  4. シーン内の Box1 をスクリプトの Box1 プロパティへドラッグし、3 つのスライダーをそれぞれ Brightness、Saturation、Contrast プロパティへドラッグして、3D カラー調整と実行時パラメータ調整に使用します。
Inspector で Tone スクリプトのプロパティを設定

Inspector で Tone スクリプトのプロパティを設定

手順 7:カラー調整操作例

以下のメソッドを Tone クラスに追加し、実行してデータ読み込み完了後に対応するメソッドを呼び出します。

通常のカラー調整

R8 マスクテクスチャを構築し、カラー調整するピクセルを 240、残りを 128 としてマークし、カメラ行列で ToneMix を構築し、brightness、saturation、contrast を設定してリストに追加します。

public void onTone()
{
    // テクスチャサイズは 1024*1024 に固定。その他のプロパティは例と同じに保つ
    Texture2D _texture = new Texture2D(1024, 1024, TextureFormat.R8, false);
    _texture.filterMode = FilterMode.Point;
    _texture.wrapMode = TextureWrapMode.Clamp;

    int _count = 1024 * 1024;
    int _half = _count / 2;
    byte[] _values = new byte[_count];
    for (int i = 0; i < _count; i++)
    {
        if (i < _half)
            _values[i] = 128;    // 128 はデフォルト、240 は選択、0 はクリッピング
        else
            _values[i] = 240;
    }
    _texture.SetPixelData(_values, 0);

    List<ToneMix> _tMixs = new List<ToneMix>();
    ToneMix _tmix01 = new ToneMix();
    _tmix01.editType = EditType.Edit2D;
    _tmix01.mv = m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.texture = _texture;
    _tmix01.mode = SelectMode.normal;
    _tmix01.mvp = GL.GetGPUProjectionMatrix(m_camera.projectionMatrix, true) * m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.brightness = 2.0f;
    _tmix01.saturation = 2.0f;
    _tmix01.contrast = 0.4f;
    _tMixs.Add(_tmix01);

    m_manager.SetTone(_tMixs);
}

コード解説:画面上半分(画面原点は左下隅)を選択するマスクテクスチャを構築し、選択領域に明るさ 2.0、彩度 2.0、コントラスト 0.4 のカラー調整を適用します。例の効果は以下のとおりです。

実際の使用では、矩形、三角形、ブラシ、投げ縄などさまざまな選択ツールでマスク上の対応位置を選択でき、brightness、saturation、contrast の値をスライダーで動的に渡すこともできます。

通常のカラー調整効果

通常のカラー調整効果

反転カラー調整

カラー調整の反転はハイライトやクリッピングと異なります。反転エントリは mode = SelectMode.invert の設定に加えて、カラー調整データ(brightness、saturation、contrast)を必ず保持し、選択外領域のカラー調整効果を指定する必要があります。上記の通常カラー調整を基に、反転エントリを追加するだけです。

public void onToneInvert()
{
    // テクスチャサイズは 1024*1024 に固定。その他のプロパティは例と同じに保つ
    Texture2D _texture = new Texture2D(1024, 1024, TextureFormat.R8, false);
    _texture.filterMode = FilterMode.Point;
    _texture.wrapMode = TextureWrapMode.Clamp;

    int _count = 1024 * 1024;
    int _half = _count / 2;
    byte[] _values = new byte[_count];
    for (int i = 0; i < _count; i++)
    {
        if (i < _half)
            _values[i] = 128;    // 128 はデフォルト、240 は選択、0 はクリッピング
        else
            _values[i] = 240;
    }
    _texture.SetPixelData(_values, 0);

    List<ToneMix> _tMixs = new List<ToneMix>();

    // 通常選択のカラー調整
    ToneMix _tmix01 = new ToneMix();
    _tmix01.editType = EditType.Edit2D;
    _tmix01.mv = m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.texture = _texture;
    _tmix01.mode = SelectMode.normal;
    _tmix01.mvp = GL.GetGPUProjectionMatrix(m_camera.projectionMatrix, true) * m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.brightness = 2.0f;
    _tmix01.saturation = 2.0f;
    _tmix01.contrast = 0.4f;
    _tMixs.Add(_tmix01);

    // 反転:カラー調整データ(明るさ/彩度/コントラスト)を必ず持つ。純粋なコマンドではない
    ToneMix _tmix02 = new ToneMix();
    _tmix02.editType = EditType.Edit2D;
    _tmix02.mode = SelectMode.invert;
    _tmix02.brightness = 0.5f;
    _tmix02.saturation = 0.5f;
    _tmix02.contrast = 2.0f;
    _tMixs.Add(_tmix02);

    m_manager.SetTone(_tMixs);
}

コード解説:通常のカラー調整に反転エントリを追加し、選択外領域に明るさ 0.5、彩度 0.5、コントラスト 2.0 のカラー調整を適用します。これにより、選択内外で異なるカラー調整パラメータを適用できます。例の効果は以下のとおりです。

反転カラー調整効果

反転カラー調整効果

注:

ハイライトとクリッピングの反転は純粋なコマンドです。mode = SelectMode.invert のエントリを追加するだけで十分で、他のデータは不要です。しかしカラー調整の反転エントリは 必ず brightness、saturation、contrast も設定する必要があります。さもないと反転領域がデフォルト値(1.0)を使い、期待した効果が得られません。

手順 8:カラー調整を解除する

QuitToneMode() を呼び出して現在のカラー調整をクリアし、シーンの元のカラーを復元します。

public void onToneClear()
{
    m_manager.QuitToneMode();
}

重要な手順

3DGS シーンをカラー調整するための重要な手順は以下のとおりです。

  1. データ読み込み前に SetEditorMode(true) を呼び出して編集状態に入ります。
  2. データ読み込み後(onLoadCallback コールバック発火後、またはボタン/イベントでトリガー)に SetTone を呼び出します。
  3. ToneMix の brightness、saturation、contrast(範囲 [0, 3]、デフォルト 1.0)でカラー調整効果を制御し、カラー調整リストの追加順が期待と一致することを確認します。
  4. 2D マスクテクスチャは 1024 × 1024 固定、R8 単一チャンネルです。ピクセル値は規約(128 デフォルト、240 選択済み)に従って埋めます。
  5. カラー調整の反転(SelectMode.invert)は 必ず brightness、saturation、contrast データを保持します。これがハイライト/クリッピングの反転との重要な違いです。
  6. カラー調整のクリアや切り替え時は、先に QuitToneMode() を呼び出します。