힘으로 어둠을 지탱하는 기술, 어둠의 주제용colors.xml 생성
TD;DL
https://github.com/sdsd08013/dark_color_gen
입문
Android10에서 가져온 기능에는 "암흑"이 있습니다.개발자를 위한 옵션 중의 어두운 덮어쓰기 항목은 이 옵션을 ON으로 설정한 상태에서 기존 응용 프로그램을 시작하면 비교적 높은 품질로 어두운 테마를 응용하는 기술이다.이 글에서 힘의 어둠을 지탱하는 기술을 이용하여 기존의 컬러스.xml에서 어두운 테마까지colors.xml을 생성합니다.
어둠의 힘을 지탱하는 기술
컬러 공간
Lab 색상 공간은 CIE1931 색상 공간을 기반으로 정의된 색상 공간에서 밝기를 나타내는 비트L과 보색 a*b로 표시됩니다.개발할 때 사용하는 익숙한 RGB 색 공간에 비해 차원 L은 특징적인 매개 변수로 인간의 시각적 밝기에 가까운 디자인이다.
[1]
Skia
구글이 인수한 Skia inc가 개발한 크롬과 파이어폭스도 실적이 있는 2D 렌더링을 목적으로 한 그래픽 라이브러리다.
Android3Honyecomb까지 렌더링은 기본적으로 사용되지만, 성능상의 이유로 렌더링 처리는 후술한 Hwui로 대체됩니다.렌더링에 사용되는 구조체 등은 Skia 정의 구조체를 계속 사용합니다.
Hwui
아마도 HardwareUI의 줄임말일 것이다.
Android3Honyecomb에 하드웨어 가속 옵션으로 추가된 IceCream Sandwitch 이후 기본 그래픽 라이브러리입니다.Android 터미널이 고해상도로 바뀌고 응용 프로그램이 풍부한 애니메이션을 요구하는 등 배경에서 Skia가 표현할 수 없는 도형을 표현하기 위해 가져옵니다.
Android에서 어둠의 힘을 실현하기 [3]
Android에서 다음 절차에 따라 어두운 테마로 변환하여 그래픽 렌더링을 합니다. 각 줄의 설명이 길어지기 때문에 생략합니다.
-> updateForceDarkMode
-> setForceDark
-> applyColorTransform
-> transformColor
-> makeDark
어두운 주제가 아닌 RGB 색상을 어두운 주제 RGB 색상으로 변환하는 프로세스에서 어두운 힘의 실체는 이 코드입니다.
RGB 색상 공간을 Lab 색상 공간으로 변경해야 하는 경우 밝기를 줄이고 다시 RGB 색상 공간으로 변경합니다.
static SkColor makeDark(SkColor color) {
Lab lab = sRGBToLab(color);
float invertedL = std::min(110 - lab.L, 100.0f);
if (invertedL < lab.L) {
lab.L = invertedL;
return LabToSRGB(lab, SkColorGetA(color));
} else {
return color;
}
}
어두운 테마colors.xml 생성
Skia에 관해서는 비교적 간단하게 공유 라이브러리[2]를 생성할 수 있기 때문에 좋지만 Hwui,android에 관한 원본 코드가 너무 커서 컴파일하기도 어려워서 해당하는 파일만 추출하고 제목 파일을 다시 씁니다.
macOS Mojava
バージョン 10.14.3
clang++ --std=c++14 \
-I ~/skia/include/core \
-I ~/skia/include/config \
-I ~/skia/include/utils \
-I ~/skia/include/gpu \
-I ~/skia \
-I transform.h \
-I Color.h \
-I ColorSpace.h \
-L ~/skia/out/Static \
-lskia -lz transform.cpp Color.cpp ColorSpace.cpp main.cpp
실제 코드는 다음과 같다.https://github.com/sdsd08013/dark_color_gen
결과
다음은droidkaigi 2018의 공식 응용 프로그램colors입니다.xml에서 어두운 테마까지colors.이것은 xml을 생성하고 구축한 결과입니다.그런 색깔이 있을 수 있지만 그것만으로도 완성도가 낮다는 인상을 준다. 실제 안드로이드의 원력 어둠에 비해 실시간으로 어둠 테마용 색깔을 생성하고 렌더링하는 원력 어둠 테마의 완성도가 높다.
refs
[1]wiki Lab 색상 공간
[2]skia 공식
[3]android Git repositories
Learning about the Android graphics subsystem
Reference
이 문제에 관하여(힘으로 어둠을 지탱하는 기술, 어둠의 주제용colors.xml 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/iwsksky/items/dc27afab6a9a757ac5ba텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)