Graphics::Clear(Color::Transparent)不会生效

探讨了Graphics::Clear(Color::Transparent)在C#中不按预期工作的问题。此函数并未清除背景为透明,而是将现有图像与透明色叠加,导致原有图像保持不变。文章提供了多个参考资料以进一步解释这一现象。
部署运行你感兴趣的模型镜像

Graphics::Clear(Color::Transparent);实际不会生效。该函数相当于在原有的基础上叠加一层,而叠加透明色的结果就是原来的图片。


参考文献:

1.http://stackoverflow.com/questions/26224018/c-sharp-graphics-clearcolor-transparent-not-working-properly

2.http://stackoverflow.com/questions/1609032/how-to-clear-graphics-on-a-transparent-control-in-windows-forms

3.https://social.msdn.microsoft.com/Forums/en-US/17bd0d8e-ece1-4bee-a926-fe67bcdd4081/how-to-use-graphicsclear?forum=csharplanguage

4.http://www.dreamincode.net/forums/topic/87804-transparent-color-is-black/



您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

import android.animation.Animator import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.graphics.Canvas import android.graphics.Color import android.graphics.ColorFilter import android.graphics.LinearGradient import android.graphics.Paint import android.graphics.Path import android.graphics.PixelFormat import android.graphics.RectF import android.graphics.Region import android.graphics.Shader import android.graphics.drawable.Drawable import android.util.Log import android.view.View import android.view.ViewGroup import android.view.animation.AccelerateDecelerateInterpolator /** @Author: admin @CreateDate: 2025/9/10 13:33 @Description: */ class AnimationManager( private val targetView: View, private val config: SkeletonConfig ) { private var animator: Animator? = null private val appliedDrawables = mutableListOf<Pair<View, Drawable>>() // 记录 (view, drawable) 对 private val paint = Paint().apply { isAntiAlias = true } fun start() { stop() // 先清理旧状态 animator = createShimmerAnimator() animator?.start() } fun stop() { // 1. 停止动画 animator?.cancel() animator = null // 2. 移除所有已添加的 Drawable appliedDrawables.forEach { (view, drawable) -> try { view.overlay.remove(drawable) } catch (e: Exception) { com.tplink.omada.libutility.log.Log.e("AnimationManager", "Failed to remove overlay from view") } } appliedDrawables.clear() } private fun createShimmerAnimator(): ValueAnimator { return ValueAnimator.ofFloat(-1f, 2f).apply { duration = config.shimmerDuration repeatCount = ValueAnimator.INFINITE interpolator = AccelerateDecelerateInterpolator() addUpdateListener { anim -> val value = anim.animatedValue as Float val shader = LinearGradient( targetView.width * value, 0f, targetView.width * (value + 1), 0f, intArrayOf(Color.TRANSPARENT, Color.parseColor(“#EEEEEE”), Color.TRANSPARENT), floatArrayOf(0f, 0.5f, 1f), Shader.TileMode.CLAMP ) paint.shader = shader // 触发所有 shimmer drawable 重绘 appliedDrawables.forEach { (_, drawable) -> drawable.invalidateSelf() } } }.also { animator -> // 创建 shimmer drawables 并添加到 overlays fun recursivelyApplyShimmer(view: View) { com.tplink.omada.libutility.log.Log.d( "AnimationManager", "Applying shimmer to: ${view.javaClass.simpleName}, ID: ${view.id}" ) if (view is ViewGroup) { for (i in 0 until view.childCount) { recursivelyApplyShimmer(view.getChildAt(i)) } } else { // 确保 view 尺寸有效 if (view.width <= 0 || view.height <= 0) return val cornerRadius = config.cornerRadius.coerceAtLeast(0f) val shimmerDrawable = object : Drawable() { private var clipPath: Path? = null override fun draw(canvas: Canvas) { val bounds = this.bounds if (bounds.isEmpty || paint.shader == null) return if (cornerRadius > 0f) { // 创建圆角矩形路径 val path = Path().apply { addRoundRect( RectF(bounds), cornerRadius, cornerRadius, Path.Direction.CW ) } // 裁剪画布:只允许在路径内绘制 canvas.clipPath(path, Region.Op.INTERSECT) } // 绘制渐变光带 canvas.drawRect(bounds, paint) } override fun setAlpha(alpha: Int) {} override fun setColorFilter(colorFilter: ColorFilter?) {} @Deprecated("Deprecated in Java") override fun getOpacity(): Int = PixelFormat.TRANSLUCENT }.apply { setBounds(0, 0, view.width, view.height) view.overlay.add(this) } appliedDrawables.add(view to shimmerDrawable) } } // 开始递归添加 shimmer 效果 recursivelyApplyShimmer(targetView) } } private fun createPulseAnimator(): ObjectAnimator { return ObjectAnimator.ofFloat(targetView, View.ALPHA, 1f, 0.5f, 1f).apply { duration = config.shimmerDuration repeatCount = ValueAnimator.INFINITE interpolator = AccelerateDecelerateInterpolator() } } }解释这个代码,写成简单点的,不用glamada,并告诉我为什么view是一个圆角矩形,但是它上面的动画移动到左边或者右边的时候造成圆角消失的现象
最新发布
11-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值