首先需要获取
WallpaperManager.FLAG_LOCK
代表锁屏壁纸
WallpaperManager.FLAG_SYSTEM
代表系统壁纸,桌面壁纸
如果
fd = null
说明锁屏壁纸和桌面壁纸是同一个
public static boolean isLockWpLight(Context context) {
Palette p = getStatusBarPalette(context);
if(null == p) {
return false;
}
return !isLegibleOnWallpaper(Color.WHITE, p.getSwatches());
}
private static Palette getStatusBarPalette(Context context) {
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
int statusBarHeight = context.getResources ().getDimensionPixelSize (R.dimen.status_bar_height);
try (ParcelFileDescriptor fd = wallpaperManager
.getWallpaperFile(WallpaperManager.FLAG_LOCK)) {
BitmapRegionDecoder decoder = BitmapRegionDecoder
.newInstance(fd.getFileDescriptor(), false);
Rect decodeRegion = new Rect(0, 0,
decoder.getWidth(), statusBarHeight);
Bitmap bitmap = decoder.decodeRegion(decodeRegion, null);
decoder.recycle();
if (bitmap != null) {
return Palette.from(bitmap).clearFilters().generate();
}
} catch (IOException | NullPointerException e) {
Log.e(TAG, "Fetching partial bitmap failed, trying old method", e);
}
Bitmap wallpaper = ((BitmapDrawable) wallpaperManager.getDrawable()).getBitmap();
return Palette.from(wallpaper)
.setRegion(0, 0, wallpaper.getWidth(), statusBarHeight)
.clearFilters()
.generate();
}
private static boolean isLegibleOnWallpaper(int color, List<Palette.Swatch> wallpaperSwatches) {
int legiblePopulation = 0;
int illegiblePopulation = 0;
for (Palette.Swatch swatch : wallpaperSwatches) {
if (isLegible(color, swatch.getRgb())) {
legiblePopulation += swatch.getPopulation();
} else {
illegiblePopulation += swatch.getPopulation();
}
}
return legiblePopulation > illegiblePopulation;
}
private static boolean isLegible(int foreground, int background) {
background = ColorUtils.setAlphaComponent(background, 255);
return ColorUtils.calculateContrast(foreground, background) >= 2;
}
分享到:
相关推荐
idea和 webstorm主题,一个浅色,一个深色。浅色的是Solarized Light (Alternate) ,深色的是Perfect VSCode 参考VSCode的主题
一个微小的实用程序,用于检查node.js或浏览器的颜色是深色还是浅色。 对于确定在不同颜色的背景上使用哪种文本颜色很有用。 (刷新页面) 原料药 darkorlight.dark(颜色) 接受十六进制字符串或rgb值数组。 如果...
网上商店阴阳 Webshop的基本图标和主题包。 包括浅色和深色主题和图标。 您可以在项目中以任何方式将它们组合在一起。
VTK/选择对比色/给定一种颜色,找到一种对比色。如果给定的颜色是“浅色”,则使用浅色,否则使用深色/ 完整可编译运行的实例
iTerm2 的一系列浅色和深色背景版本的配色方案 硫磺工作室 对于这些的构建, 是一个模型, 是一个构建工具。 就像在 Solarized 中一样,配色方案采用浅色和深色背景版本。 这实际上只是同一个想法的变体,但每个都...
emacs-humanoid-themes:Emacs的浅色和深色主题以及明亮的颜色,支持GUI和终端
WEUI的使用方法; 交互以及屏蔽或者修改深色浅色模式; 对于减轻工作量还是有帮助的; 所以记了下来; 节省以后的时间
浅色/ 深色烧杯 浅色/ 深色钟点 浅色/ 深色钟 浅色/ 深色受阻 浅色/ 深色大胆的 浅色/ 深色书 浅色/ 深色书签 浅色/ 深色公文包 浅色/ 深色播送 浅色/ 深色浏览器 浅色/ 深色漏洞 浅色/ 深色建造 浅色/ 深色日历 ...
具有浅色和深色主题的Google语音电子包裹的Google语音应用,具有浅色和深色主题。用法从以下位置下载最新版本: : 编译自己需要Docker来构建映像。 为docker创建nativefier映像: ./makeApps.sh build 运行构建: ./...
darkmode就是深色主题,也称为黑色主题。这个是系统级别的主题,2020年的时候微信开始支持darkmode,随后微信小程序也开始适配了darkmode,在深色主题模式下,微信小程序会自动根据当前主题要做对应的样式适配。这样...
一些ps素材,有花纹,图案,都是一些浅色的东西,很漂亮的
PGM 图像,10 种手部姿势(A、B、C、D、G、H、I、L、V、Y),24 人,3 种背景(浅色、深色、复杂)。PGM 图像,10 种手部姿势(A、B、C、D、G、H、I、L、V、Y),24 人,3 种背景(浅色、深色、复杂)。PGM 图像,10...
手部姿势(A、B、C、D、G、H、I、L、V、Y),24 人,3 种背景(浅色、深色、复杂)。手部姿势(A、B、C、D、G、H、I、L、V、Y),24 人,3 种背景(浅色、深色、复杂)。手部姿势(A、B、C、D、G、H、I、L、V、Y),...
papercolor-theme:受Google材料设计启发的浅色和深色Vim配色方案
两种配色方案,类似于 MATLAB 的默认设置,并添加了一些内容(包括浅色和深色背景版本) 这些配色方案基于Ian Langworth的“ tolerable.vim”,并经过修改以类似于MATLAB在浅色和深色背景上的默认颜色。 颜色很容易...
调用DarkThemeUtils.isDarkTheme(this),判断当前主题是浅色还是深色,可进行判断执行不同的逻辑。
轻松优雅地预览/选择VCL应用程序的主题(浅色或深色)以及HighDPI演示 相关链接: : : 使用VCLThemeSelector,您可以轻松地为Delphi VCL应用添加一个现代而优雅的主题选择器。 该表格显示了应用程序中包含的所有...
可以遵循“ 规范在所有浏览器中使用浅色和深色配色。 用法 在命令行中,转换使用prefers-color-scheme媒体查询CSS文件: npx css-prefers-color-scheme SOURCE.css TRANSFORMED.css 接下来,将转换后CSS与以下...
为Emacs 24.3+设置的彩色,低对比度,浅色和深色主题。 它力求令人愉快,干净和一致,并特别关注当前缓冲区。 这个主题的开始是Frakenstein混搭了我大量定制的solarized-light base16-eighties-theme和solarized-...
prot16:配色方案主要用于突出显示代码语法。 每个主题使用16色调色板。 它有浅色和深色两种