确定屏幕覆盖的区域
determine area of screen covered
我们有一个应用程序,允许用户使用附加到鼠标的"画笔"擦除顶层图像。 画笔可以是任何类型的形状,例如圆形、星形、W 或任何随机的奇异形状。
这目前在C++中使用 DirectX9 和着色器 (3.0( 实现。 这是一个旧系统,DirectX 的更高版本不可用。 单通道不透明度贴图累积画笔描边。 然后将不透明度贴图用作顶部和底部图像之间的 alpha 层。
问题是,当图像显示一定百分比时,需要自动擦除图像的其余部分。 例如,如果用户已经显示了底层的 60%,则应用将自动清除不透明度地图的其余部分以显示所有不透明度地图。问题是试图弄清楚在不锁定表面和计算像素的情况下擦除了多少不透明度贴图,因为这真的很慢。
您可以尝试以下方法:
- 创建 1x 帧缓冲
- 创建一个着色器,通过获取一列像素的所有不透明度值的总和并将其写入帧缓冲区中的该索引,呈现到此帧缓冲区中。每个着色器调用应负责一列像素。
- 锁定帧缓冲图面并汇总所有这些像素值。这应该比对整个屏幕执行此操作要快得多。
- 将您的总和与原始宽度和高度的乘积进行比较。
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 我可以重新分配/覆盖std::字符串吗
- 将QGraphicsItem的移动区域限制在多边形区域内
- 叮叮当当在修复时插入多个"覆盖"说明符
- 谷歌模拟和覆盖关键字
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- 使用子类覆盖基类中定义的函数
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- C++指针在 for 循环中被覆盖
- 两个连续的 OpenMP 并行区域会相互减慢速度
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 提升区域设置规范化带状字符,但不规范化重音
- 为什么我的全局 new() 覆盖被绕过了?
- 被覆盖的函数不会反映在基类中,这是正常行为吗?
- 确定屏幕覆盖的区域
- 为什么当窗口在win32上失去焦点时,被覆盖的非客户端区域显示默认值
- 给定一个矩形区域和一组矩形,检查它们是否覆盖了整个区域