解决在使用skin.support:skin-support换肤控件报错问题

解决在使用skin.support:skin-support换肤控件报错问题

1.如果项目中还在使用support库,添加以下依赖

implementation 'skin.support:skin-support:3.1.4'                   // skin-support 基础控件支持
implementation 'skin.support:skin-support-design:3.1.4'            // skin-support-design material design 控件支持[可选]
implementation 'skin.support:skin-support-cardview:3.1.4'          // skin-support-cardview CardView 控件支持[可选]
implementation 'skin.support:skin-support-constraint-layout:3.1.4' // skin-support-constraint-layout ConstraintLayout 控件支持[可选]

在Application的onCreate中初始化。如未初始化,控件会在设置background这一属性上报错。

@Override
public void onCreate() {
    super.onCreate();
    SkinCompatManager.withoutActivity(this)                         // 基础控件换肤初始化
            .addInflater(new SkinMaterialViewInflater())            // material design 控件换肤初始化[可选]
            .addInflater(new SkinConstraintViewInflater())          // ConstraintLayout 控件换肤初始化[可选]
            .addInflater(new SkinCardViewInflater())                // CardView v7 控件换肤初始化[可选]
            .setSkinStatusBarColorEnable(false)                     // 关闭状态栏换肤,默认打开[可选]
            .setSkinWindowBackgroundEnable(false)                   // 关闭windowBackground换肤,默认打开[可选]
            .loadSkin();
}

如果项目中使用的Activity继承自AppCompatActivity,需要重载getDelegate()方法。如未重载此方法,则会导致换肤不可用

@Override
public void onCreate() {
    super.onCreate();
    SkinCompatManager.withoutActivity(this)                         // 基础控件换肤初始化
            .addInflater(new SkinMaterialViewInflater())            // material design 控件换肤初始化[可选]
            .addInflater(new SkinConstraintViewInflater())          // ConstraintLayout 控件换肤初始化[可选]
            .addInflater(new SkinCardViewInflater())                // CardView v7 控件换肤初始化[可选]
            .setSkinStatusBarColorEnable(false)                     // 关闭状态栏换肤,默认打开[可选]
            .setSkinWindowBackgroundEnable(false)                   // 关闭windowBackground换肤,默认打开[可选]
            .loadSkin();
}

2.如果项目中使用了AndroidX, 添加以下依赖

implementation 'skin.support:skin-support:4.0.5'                   // skin-support
implementation 'skin.support:skin-support-appcompat:4.0.5'         // skin-support 基础控件支持
implementation 'skin.support:skin-support-design:4.0.5'            // skin-support-design material design 控件支持[可选]
implementation 'skin.support:skin-support-cardview:4.0.5'          // skin-support-cardview CardView 控件支持[可选]
implementation 'skin.support:skin-support-constraint-layout:4.0.5' // skin-support-constraint-layout ConstraintLayout 控件支持[可选]

在Application的onCreate中初始化。如未初始化,控件会在设置background这一属性上报错。

@Override
public void onCreate() {
    super.onCreate();
    SkinCompatManager.withoutActivity(this)
            .addInflater(new SkinAppCompatViewInflater())           // 基础控件换肤初始化
            .addInflater(new SkinMaterialViewInflater())            // material design 控件换肤初始化[可选]
            .addInflater(new SkinConstraintViewInflater())          // ConstraintLayout 控件换肤初始化[可选]
            .addInflater(new SkinCardViewInflater())                // CardView v7 控件换肤初始化[可选]
            .setSkinStatusBarColorEnable(false)                     // 关闭状态栏换肤,默认打开[可选]
            .setSkinWindowBackgroundEnable(false)                   // 关闭windowBackground换肤,默认打开[可选]
            .loadSkin();
}

如果项目中使用的Activity继承自AppCompatActivity,需要重载getDelegate()方法,如未重载此方法,则会导致换肤不可用

@NonNull
@Override
public AppCompatDelegate getDelegate() {
    return SkinAppCompatDelegateImpl.get(this, this);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误通常是由于 `inpainted` 和 `skin` 两个图像的尺寸不一致所引起的。请确保 `inpainted` 和 `skin` 两个图像的尺寸相同,可以使用 `cv2.resize()` 函数将它们的大小调整为相同的大小。 以下是修改后的代码: ```python import cv2 import numpy as np # 读取图片 img = cv2.imread("face.jpg") # 将图像转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 对灰度图进行平滑 blur = cv2.GaussianBlur(gray, (5, 5), 0) # 增强对比度 clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) contrast = clahe.apply(blur) # 定义皮肤颜色范围 lower_skin = np.array([0, 20, 70], dtype=np.uint8) upper_skin = np.array([20, 255, 255], dtype=np.uint8) # 将图像转换为HSV颜色空间 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 根据皮肤颜色范围进行阈值分割 mask = cv2.inRange(hsv, lower_skin, upper_skin) # 进行形态学操作,去除噪声并填补空洞 kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)) mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) # 对皮肤区域进行细节增强 skin = cv2.bitwise_and(contrast, contrast, mask=mask) skin = cv2.addWeighted(skin, 1.5, cv2.GaussianBlur(skin, (0,0), 5), -0.5, 0) # 对非皮肤区域进行修复 inpainted = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA) # 将修复后的皮肤区域与原图融合 skin = cv2.resize(skin, inpainted.shape[1::-1]) result = cv2.addWeighted(inpainted, 0.5, skin, 0.5, 0) # 显示结果 cv2.imshow("Original", img) cv2.imshow("Result", result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个代码中,我们使用了 `cv2.resize()` 函数将 `skin` 的大小调整为 `inpainted` 的大小。这样做可以避免尺寸不匹配的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值