يمكن أن يؤدي اختلاف إمكانات HDR على أجهزة Android إلى تفاوت في جودة عرض المحتوى بتقنية HDR. لوحة الألوان (LUT) هي حلّ جديد لتصحيح الألوان تم تصميمه لحلّ مشكلة عدم الاتساق هذه. يتم حلّ هذا التناقض من خلال تحديد طريقة لتصحيح الألوان، بدلاً من تفويض آلية غير محدّدة لتصحيح الألوان لكل جهاز.
المتطلبات الأساسية لحزمة تطوير البرامج (SDK)
لتنفيذ لوحات الألوان، يجب أن يكون إصدار حزمة تطوير البرامج (SDK) 36 أو إصدار أحدث.
كيفية تطبيق لوحة ألوان
اتّبِع الخطوات التالية لتطبيق لوحة ألوان على SurfaceControl:
- أنشئ مثيل
DisplayLuts. - أنشِئ مثيلات
DisplayLuts.Entryباستخدام مخزن البيانات المؤقّت للوحة الألوان وبُعد لوحة الألوان ومفتاح أخذ العينات للوحة الألوان. لمزيد من المعلومات، يُرجى الاطّلاع على مستنداتLutProperties. - يمكنك استدعاء
DisplayLuts#set(DisplayLuts.Entry luts)أوDisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)لضبط إدخالات لوحة الألوان. يتيح إطار العمل استخدام لوحة ألوان أحادية البُعد أو ثلاثية الأبعاد أو مزيج من لوحات الألوان الأحادية البُعد والثلاثية الأبعاد. - استخدِم الدالة
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 التعامل مع لوحة الألوان المحدّدة.