`
zhy20045923
  • 浏览: 157372 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

判断图片是浅色还是深色

 
阅读更多
首先需要获取

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;
}
分享到:
评论

相关推荐

    Js之canvas获取图片主色调,近似色,互补色,以及根据图片颜色获取主题配色方案详解、插件

    本文将深入探讨如何利用Canvas API来获取图片的主要色调、近似色、互补色,并且基于这些颜色信息创建主题配色方案。我们将不涉及任何具体插件的使用,而是通过JavaScript原生方法实现这一过程。 首先,我们需要加载...

    WebKit和Chromium源码及原理剖析.pdf

    - 通过检测浏览器的User-Agent字符串,可以大致判断出浏览器所使用的JavaScript引擎类型。 - 利用JavaScript的`navigator`对象和`window`对象的一些属性和方法,可以进一步确定JavaScript引擎的具体版本和其他细节...

    天气预报图片

    9. **适应性**:为了适应不同用户的需求,图标设计可以考虑提供深色和浅色两种模式,以便于在夜间或强光环境下使用。 10. **版权问题**:在使用这些图片时,开发者需注意版权问题,确保获得合法授权,避免因侵犯...

    五子棋素材五子棋素材

    【标题】"五子棋素材五子棋素材" 指的是与五子棋游戏相关的图形素材资源,可能包括棋盘、棋子等元素。在Java编程中,这些素材可能会被...同时,还需要编写游戏逻辑代码,处理棋局的规则判断,如连珠检查、胜负判断等。

    LCD测试图LCD专业测试.rar

    测试图会展示深色和浅色的过渡,观察者需确认在不同亮度层次之间是否有清晰的分界线。 3. 响应时间测试:响应时间是液晶分子改变状态的速度,通常以毫秒为单位。慢响应时间可能导致运动模糊。快速移动的图形或者...

    江苏省连云港市灌云县2015_2016学年九年级化学上学期期中试题含解析新人教版

    7. **分子的运动性**:深色染料染上浅色衣服是因为染料分子在不断运动,扩散到了浅色衣服的纤维中。 8. **硅酸盐与硅酸的化学式**:根据硅酸盐中硅元素的化合价为+4价,可以推断硅酸的化学式为H2SiO3。 9. **化学...

    基于react的组件库主题设计方案.docx

    - 组件库的样式分为三类:与主题相关的深色和浅色主题,以及与主题切换无关的其他样式。默认使用浅色主题的颜色配置表结合其他可配置的默认样式。业务侧可以通过覆盖样式生成最终样式表,并通过`value`属性将其传递...

    抓图神器2016

    Features: 1. 从指定网页以及符合所设定的正则表达式匹配规则的二...3. Win7下程序会调用透明窗体运行,但是尚未实现label文字背景透明,将窗体置于浅色背景之上,文字有点模糊不清,建议将其放在深色背景上面操作。

    抓图神器2016 with update 3

    Important updates in update 3: 1. 修复了图片地址末尾有空白符时...3. Win7下程序会调用透明窗体运行,但是尚未实现label文字背景透明,将窗体置于浅色背景之上,文字有点模糊不清,建议将其放在深色背景上面操作。

    100个黑色调的电脑图标集,尺寸:128x128,格式:PNG vista下电脑图标可以全部使用这套图标替换

    黑色调图标在深色或浅色背景下都能保持良好的可读性,同时,这种单一色调的设计也更容易形成统一的视觉风格,提升整体界面的美感。 在压缩包内,我们发现了以下文件: 1. about.html:这可能是一个介绍图标集的...

    PS扣图技巧.doc

    - **本图层深色滑块**:右移以删除本图层中深色滑块左侧对应灰度的图像。 - **本图层浅色滑块**:左移以删除本图层中浅色滑块右侧对应灰度的图像。 - **滑块分离**:按住Alt键点击滑块,可以将滑块分为两半,移动半...

    C++&&Opencv实现控制台字符动画的方法

    比如,浅色可以用'.'表示,深色可以用'#'表示,通过这样的一种映射方式来实现字符动画的效果。 由于我们需要在控制台中进行字符的打印,并且希望在特定的位置打印字符,所以涉及到控制台的光标移动。在Windows环境...

    微信小程序组件 contact-button(客服会话按钮)详解及实例代码

    `default-dark`通常是深色背景下的样式,而`default-light`适用于浅色背景。开发者可以根据自己的小程序主题来选择合适的样式。 3. **session-from (String)**: 这个属性用于设置用户通过该按钮进入客服会话时的...

    AndroidQ(10)黑暗模式适配的实现

    考虑创建深色和浅色版本的图片,并在不同的主题下使用。 7. **测试**: 充分测试应用在黑暗模式下的表现,确保所有界面和交互都正常,颜色和对比度适中。 8. **监听黑暗模式变化**: 为了响应系统黑暗模式的实时...

    CDIB类完全代码

    用于图片处理,包括打开,存储,移动等,。 //====================================================================== // 文件: Dib.cpp // 内容: 设备无关位图类-源文件 // 功能: (1)位图的加载与保存; // ...

Global site tag (gtag.js) - Google Analytics