تصحيح الألوان باستخدام جداول البحث (LUT)
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
قد تؤدي إمكانات النطاق العالي الديناميكية المختلفة على أجهزة Android إلى تجزئة مخرجات عرض النطاق العالي الديناميكية. جدول البحث (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()
لفهم خصائص جدول البحث (LUT) للجهاز، وتحديد ما إذا كان برنامج Hardware Composer يمكنه التعامل مع جدول البحث المحدّد.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-08-21 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-08-21 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Color correct with look-up tables (LUTs)\n\nVarying HDR capabilities across Android devices can lead to fragmented HDR\ndisplay outputs. A look-up table (LUT) is a new color correction solution\ndesigned to resolve this inconsistency. This inconsistency is resolved by\n*prescribing* a way to color correct, rather than delegating to an undefined\nper-device color correction mechanism.\n\nSDK prerequisites\n-----------------\n\nTo implement LUTs, your SDK version must 36 or higher.\n\nImplement a LUT\n---------------\n\nFollow these steps to apply a LUT to a [`SurfaceControl`](/reference/android/view/SurfaceControl):\n\n1. Create a [`DisplayLuts`](/reference/android/hardware/DisplayLuts) instance.\n2. Create [`DisplayLuts.Entry`](/reference/android/hardware/DisplayLuts.Entry) instance(s) with the LUT data buffer, LUT dimension, and the sampling key of the LUT. For more information, see [`LutProperties`](/reference/android/hardware/LutProperties) documentation.\n3. Call [`DisplayLuts#set(DisplayLuts.Entry luts)`](/reference/android/hardware/DisplayLuts#set(android.hardware.DisplayLuts.Entry)) or [`DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)`](/reference/android/hardware/DisplayLuts#set(android.hardware.DisplayLuts.Entry,%20android.hardware.DisplayLuts.Entry)) to set LUT entries. The framework supports 1D LUT, 3D LUT, or a combination of 1D and 3D LUTs.\n4. Call [`SurfaceControl.Transaction#setLuts`](/reference/android/view/SurfaceControl.Transaction#setLuts(android.view.SurfaceControl,%20android.hardware.DisplayLuts)) to apply the LUTs to the layer.\n\n### Kotlin\n\n val sc = SurfaceControl.Builder().build()\n val luts = DisplayLuts()\n val entry = DisplayLuts.Entry(\n floatArrayOf(0.5f, 0.5f, 0.5f, 0.5f),\n LutProperties.ONE_DIMENSION,\n LutProperties.SAMPLING_KEY_MAX_RGB\n )\n luts.set(entry)\n SurfaceControl.Transaction().setLuts(sc, luts).apply()\n\n### Java\n\n SurfaceControl sc = new SurfaceControl.Builder().build();\n DisplayLuts luts = new DisplayLuts();\n DisplayLuts.Entry entry = new DisplayLuts.Entry(\n new float[]{0.5f, 0.5f, 0.5f, 0.5f},\n LutProperties.ONE_DIMENSION,\n LutProperties.SAMPLING_KEY_MAX_RGB\n );\n luts.set(entry);\n new SurfaceControl.Transaction().setLuts(sc, luts).apply();\n\nYou can also use [`OverlayProperties.getLutProperties()`](/reference/android/hardware/OverlayProperties#getLutProperties()) to understand the\nLUT properties of the device, and determine if the Hardware Composer can handle\nthe selected LUT."]]