แก้ไขสีด้วยตารางการค้นหา (LUT)
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
ความสามารถของ HDR ที่แตกต่างกันในอุปกรณ์ Android อาจทำให้เอาต์พุตการแสดงผล HDR
กระจัดกระจาย ตารางการค้นหา (LUT) เป็นโซลูชันการแก้ไขสีแบบใหม่
ที่ออกแบบมาเพื่อแก้ไขความไม่สอดคล้องกันนี้ ความไม่สอดคล้องนี้ได้รับการแก้ไขโดยการกำหนดวิธีแก้สี แทนที่จะมอบหมายให้กลไกการแก้สีต่ออุปกรณ์ที่ไม่ได้กำหนด
ข้อกำหนดเบื้องต้นของ SDK
หากต้องการใช้ LUT คุณต้องใช้ SDK เวอร์ชัน 36 ขึ้นไป
ใช้ LUT
ทำตามขั้นตอนต่อไปนี้เพื่อใช้ LUT กับSurfaceControl
- สร้างอินสแตนซ์
DisplayLuts
- สร้างอินสแตนซ์
DisplayLuts.Entry
ด้วยบัฟเฟอร์ข้อมูล LUT, มิติข้อมูล LUT และคีย์การสุ่มตัวอย่างของ LUT ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ LutProperties
- โทรหา
DisplayLuts#set(DisplayLuts.Entry luts)
หรือ
DisplayLuts#set(DisplayLuts.Entry first, DisplayLuts.Entry second)
เพื่อตั้งค่ารายการ LUT เฟรมเวิร์กรองรับ LUT แบบ 1 มิติ, LUT แบบ 3 มิติ หรือการผสมผสานระหว่าง LUT แบบ 1 มิติและ 3 มิติ
- เรียกใช้
SurfaceControl.Transaction#setLuts
เพื่อใช้ LUT กับเลเยอร์
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 สามารถจัดการ
LUT ที่เลือกได้หรือไม่
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-08-27 UTC
[null,null,["อัปเดตล่าสุด 2025-08-27 UTC"],[],[],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."]]