تصحيح الألوان باستخدام جداول البحث (LUT)

يمكن أن تؤدي إمكانات HDR المختلفة على أجهزة Android إلى إخراجات عرض HDR مجزّأة. جدول البحث (LUT) هو حلّ جديد لتصحيح الألوان مصمَّم لحلّ هذا التناقض. يتم حلّ هذا التناقض من خلال تحديد طريقة لتصحيح الألوان، بدلاً من تفويضها إلى آلية غير محدّدة لتصحيح الألوان لكل جهاز.

المتطلبات الأساسية لحزمة تطوير البرامج (SDK)

لتنفيذ جداول البحث، يجب أن يكون إصدار حزمة تطوير البرامج (SDK) 36 أو إصدارًا أحدث.

تنفيذ جدول بحث

اتّبِع الخطوات التالية لتطبيق جدول بحث على SurfaceControl:

  1. أنشِئ مثيلاً من DisplayLuts.
  2. أنشِئ مثيلاً واحدًا أو أكثر من DisplayLuts.Entry باستخدام مخزن بيانات جدول البحث، وأبعاد جدول البحث ومفتاح أخذ العينات لجدول البحث. لمزيد من المعلومات، اطّلِع على مستندات LutProperties.
  3. استخدِم DisplayLuts#set(DisplayLuts.Entry luts) أو DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second) لضبط إدخالات جدول البحث. تتوافق البنية الأساسية مع جدول البحث الأحادي الأبعاد أو جدول البحث الثلاثي الأبعاد أو مزيج من جدولَي البحث الأحادي والثلاثي الأبعاد.
  4. استخدِم SurfaceControl.Transaction#setLuts لتطبيق جداول البحث على الطبقة.

Kotlin

val sc = SurfaceControl.Builder().build()
val luts = DisplayLuts()
val entry = DisplayLuts.Entry(
    floatArrayOf(0.5f, 0.5f, 0.5f, 0.5f),
    LutProperties.ONE_DIMENSION,
    LutProperties.SAMPLING_KEY_MAX_RGB
)
luts.set(entry)
SurfaceControl.Transaction().setLuts(sc, luts).apply()

Java

SurfaceControl sc = new SurfaceControl.Builder().build();
DisplayLuts luts = new DisplayLuts();
DisplayLuts.Entry entry = new DisplayLuts.Entry(
  new float[]{0.5f, 0.5f, 0.5f, 0.5f},
  LutProperties.ONE_DIMENSION,
  LutProperties.SAMPLING_KEY_MAX_RGB
);
luts.set(entry);
new SurfaceControl.Transaction().setLuts(sc, luts).apply();

يمكنك أيضًا استخدام OverlayProperties.getLutProperties() لفهم خصائص جدول البحث للجهاز وتحديد ما إذا كان بإمكان Hardware Composer التعامل مع جدول البحث المحدّد.