billedkilde

Android farvestyring: Hvad udviklere og designere har brug for at vide

I den nylige Oreo-udgivelse fik Android initial støtte til farvestyring - hvilket hjælper med at matche farveoutput på tværs af enheder. Med opdateringen kan Android-enheder nu vise farver uden for sRGB-farveudvalget. Hvis du ikke er bekendt med farveprofiler eller hvad bred farveudvalg er, så vil jeg varmt anbefale denne video fra Google I / O til forståelse af farve:

tl; dw; farvestyring sikrer, at farverne ser ens ud på forskellige skærme. For eksempel kan farve nr. Ff0000 (ren rød for dem, der ikke læser hex-koder) vises forskelligt afhængigt af skærmteknologien, der viser den - nogle skærme er i stand til at vise mere mættede eller intense farver end andre. At sige # ff0000 i sRGB specificerer en specifik rødfarve (i sRGB-farverummet), så farvestyrede skærme kan producere den nøjagtige ønskede farve.

I dette indlæg vil jeg gerne skitsere, hvad Android-app-designere og -udviklere har brug for at vide om disse ændringer.

Viser brede farvebilleder

Billeder kan integrere en farveprofil og angive farveområdet for deres farveoplysninger. Tilsvarende er mange kameraer i stand til at fange brede farveudvalg og indlejre en passende farveprofil. Dette giver dem mulighed for at vise farver ud over standard sRGB-spektret. For at få vist billeder med brede farveprofiler i din app skal du tilmelde dig pr. Aktivitet. For at gøre dette skal du indstille attributten colorMode i aktivitetserklæringen i din applikations manifest:

Du kan også indstille dette programmatisk, men du skal gøre det under onCreate, før dit vindue oprettes. Bred farveskalaunderstøttelse er opt-in, da det kræver flere systemressourcer (hvilket kan resultere i et ydelsesfald i din app):

”Når tilstanden for bred farveudvalg er aktiveret, bruger aktivitetsvinduet mere hukommelse og GPU-behandling til skærmsammensætning. Inden du aktiverer bred farveudvalgstilstand, skal du nøje overveje, om aktiviteten virkelig drager fordel af den. F.eks. Er en aktivitet, der viser fotos på fuldskærm, en god kandidat til bred farveudvalgstilstand, men en aktivitet, der viser små miniaturebilleder, er det ikke. ”- Udvikler dokumentation

Bemærk, at hvis du bruger en enkelt aktivitetsarkitektur, kan det være fornuftigt at udbryde bredt farvedisplaybillede til en ny aktivitet.

Her er et eksempel, der viser to aktiviteter, der viser det samme bredt farveudvalgstestbillede (en PNG med Display P3-farveprofilen indlejret). Den øverste aktivitet erklærer en bred farveudvælgelsesfarvetilstand, bunden gør det ikke.

Aktiviteter, der viser bredt farveudholdsindhold, skal tilvælge bred farvetilstand (øverst)

Farve nøjagtig gengivelse

Mange Android-enheder har haft skærme, der er i stand til at vise bredere farveudvalg i nogen tid. Før Android 8.0's farvestyring antages, at alt indhold var sRGB, men brede farvedisplay ville genfortolke farveværdierne i deres udvalg og "straks" farverne effektivt. Dette gør røde mere røde, grønne mere grøn osv., Hvilket fører til et mere mættet udseende. Denne strækning er imidlertid upræcise, og der er ingen måde at beregne strækningseffekten, hvorfor de gengivne farver ikke er nøjagtige.

Mange applikationer har desatureret deres aktiver for at kompensere for denne strækning. Som en konsekvens kan farver vises dæmpede, når de vises på enheder med kalibreret skærm. Det er på farvepræcise enheder, f.eks. Pixel 2, de desaturerede aktiver vises mindre levende end på ikke-nøjagtige skærme. Når farve-nøjagtig gengivelse er udbredt, kan app-producenter stoppe med at ændre aktiver og være sikre på, at deres indhold vises som tilsigtet. Indtil da er der dog nogle trin, du kan tage for at sikre, at dit indhold ser godt ud på både farvepræcise skærme og på ikke-farvestyrede enheder.

Android 8.0 tilføjer en ny widecg-ressourcekvalifikator, som du kan bruge til at ændre farver på enheder, hvis skærm har et bredt farveudvalg, og bred gengivelse af farvebånd understøttes (også nuidecg for det inverse).

Bemærk, at understøttelse af bredt farvespektrum adskiller sig fra, om den aktuelle aktivitet kører i wideColorGamut-farvetilstand. Det er denne kvalifikation, der gælder, hvis enheden understøtter nøjagtig gengivelse af farve, uanset om aktiviteten kører i bred farvetilstand.

For eksempel kan en applikation erklære en basispalette med farver i res / Values ​​/ Colors.xml:


 # 5bc3cc 
 # 302c54 
 # c7416b 
 # e37b5b 
 # ffd64f 

... og et alternativt sæt i res / Values-Widecg / Colors.xml:

 # 36c1cd 
 # 251f55 
 # c8144e 
 # e4572e 
 # ffc914 
Angiv forskellige farver, der skal bruges på nøjagtige farver (venstre) og ældre enheder

Du kan bruge den samme teknik med rasteraktiver (f.eks. Res / drawable-widecg-mdpi / foo.png), men dette vil kræve forsendelse af nær duplikataktiver, så det er måske ikke værd at udveksle størrelsen på din app. Overvej at flytte til vektoraktiver, der kan farves dynamisk.

Bredere støtte kommer

Mens vi for nylig annoncerede planer om at tilføje en ny 'mættet' farvetilstand, der lader brugere vælge at fravælge farve-nøjagtig gengivelse (dvs. fungere som et nuidecg-udstyr), mener jeg stadig, at det er vigtigt at opdatere dine apps til en farvestyret verden. Ved at opdatere dine apps for bedre at understøtte nøjagtigt gengivelse af farver, vil færre brugere føle behovet for at fravælge denne tilstand. Vi planlægger at fortsætte med at investere i bredfarvet support; tilføjelse af flere API-overflader til at arbejde med brede farveudvalg i fremtidige udgivelser (såsom opdaterede Paint- og lærred-API'er, der accepterer farver med større bitpræcision).

Realiteten i moderne skærme er, at designere og udviklere nu skal have forståelse for farvestyring, og hvordan de kan anvendes i deres app. Efterhånden som flere enheder leveres med brede gamut-skærme og farve-nøjagtig gengivelse, er det vigtigt at komme foran bølgen og opdatere dine apps for at give den bedste oplevelse. Vi betragter dette som den bedste måde at levere en god oplevelse til dine brugere, hvor de farver, de ser, er de, du havde til hensigt.

Relateret læsning

  • En stor grundbegynder til farvestyring
  • Bred guide til farveindhold
  • Android ColorSpace-dokumentation, fælles understøttede farverum
  • Instagram's oplevelse med at implementere bred farve på iOS
  • Giver mening om farvestyring