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

قد تؤدي إمكانات النطاق العالي الديناميكية المختلفة على أجهزة Android إلى تجزئة مخرجات عرض النطاق العالي الديناميكية. جدول البحث (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() لفهم خصائص جدول البحث (LUT) للجهاز، وتحديد ما إذا كان برنامج Hardware Composer يمكنه التعامل مع جدول البحث المحدّد.