- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以有DropShadowEffect
渲染阴影时忽略某些颜色?有某种蒙版(颜色选择性)阴影?
我的问题是什么阴影可以分配给整个视觉元素(图形)。它看起来像这样:
而且我要
注意没有阴影的网格线(除了 0,0
的)。这可以通过在缩放/偏移图中同步 2 个来实现,一个没有包含网格的阴影效果,另一个带有包含其余部分的阴影。但是我对这个解决方案不是很满意(我预测该解决方案将来会出现很多问题)。所以我宁愿修改DropShadowEffect
不知何故。
我可以创建和使用 ShaderEffect
,但我不知道如何对着色器进行编程以获得实际的阴影效果(如果它可以由着色器产生的话)。
也许用 DropShadowEffect
做某事更简单。本身?任何人?
编辑
我试图制作着色器效果:
sampler2D _input : register(s0);
float _width : register(C0);
float _height : register(C1);
float _depth : register(C2); // shadow depth
float4 main(float2 uv : TEXCOORD) : COLOR
{
// get pixel size
float2 pixel = {1 / _width, 1 / _height};
// find color at offset
float2 offset = float2(uv.x - pixel.x * _depth, uv.y - pixel.y * _depth);
float4 color = tex2D(_input, offset);
// convert to gray?
//float gray = dot(color, float4(0.1, 0.1, 0.1, 0));
//color = float4(gray, gray, gray, 1);
// saturate?
//color = saturate(color);
return tex2D(_input, uv) + color;
}
Graph
来实现的。其中有模板
<Border x:Name="PART_Border" BorderThickness="1" BorderBrush="Gray" CornerRadius="4" Background="White">
<Grid>
<Image x:Name="PART_ImageBack" Stretch="None"/>
<Image x:Name="PART_ImageFront" Stretch="None">
<Image.Effect>
<DropShadowEffect Opacity="0.3"/>
</Image.Effect>
</Image>
</Grid>
</Border>
PART_ImageFront
上(带阴影),而网格渲染到
PART_ImageBack
(没有阴影)。性能方面还是不错的。
最佳答案
我对像素着色器的经验为零,但这是我对忽略“未着色”像素的阴影效果的快速而肮脏的尝试:
sampler2D _input : register(s0);
float _width : register(C0);
float _height : register(C1);
float _depth : register(C2);
float _opacity : register(C3);
float3 rgb_to_hsv(float3 RGB) {
float r = RGB.x;
float g = RGB.y;
float b = RGB.z;
float minChannel = min(r, min(g, b));
float maxChannel = max(r, max(g, b));
float h = 0;
float s = 0;
float v = maxChannel;
float delta = maxChannel - minChannel;
if (delta != 0) {
s = delta / v;
if (r == v) h = (g - b) / delta;
else if (g == v) h = 2 + (b - r) / delta;
else if (b == v) h = 4 + (r - g) / delta;
}
return float3(h, s, v);
}
float4 main(float2 uv : TEXCOORD) : COLOR {
float width = _width; // 512;
float height = _height; // 512;
float depth = _depth; // 3;
float opacity = _opacity; // 0.25;
float2 pixel = { 1 / width, 1 / height };
float2 offset = float2(uv.x - pixel.x * depth, uv.y - pixel.y * depth);
float4 srcColor = tex2D(_input, offset);
float3 srcHsv = rgb_to_hsv(srcColor);
float4 dstColor = tex2D(_input, uv);
// add shadow for colored pixels only
// tweak saturation threshold as necessary
if (srcHsv.y >= 0.1) {
float gray = dot(srcColor, float4(0.1, 0.1, 0.1, 0.0));
float4 multiplier = float4(gray, gray, gray, opacity * srcColor.a);
return dstColor + (float4(0.1, 0.1, 0.1, 1.0) * multiplier);
}
return dstColor;
}
关于wpf - 智能 DropShadowEffect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216904/
是否可以有DropShadowEffect渲染阴影时忽略某些颜色?有某种蒙版(颜色选择性)阴影? 我的问题是什么阴影可以分配给整个视觉元素(图形)。它看起来像这样: 而且我要 注意没有阴影的网格线(除
禁用 DropShadowEffect 的最佳方法是什么,例如,如果您知道自己正在远程 session 中运行? 我可以考虑将颜色设置为透明,将模糊半径设置为 0,或将不透明度设置为零,但不确定这些选
我观察到将 DropShadowEffect 应用于 UIElement 偶尔会导致 UIElement 的内容有点模糊。这是一个非常讨厌的效果:它可能导致照片失去焦点或更糟 - 使整个“弹出”区域完
我有一个带有 DropShadowEffect 的 TextBlock。某些阴影颜色显示的颜色比指定的颜色更暗,就好像它们是有色的一样。但是,并非每种颜色都会发生这种情况。有谁知道原因或纠正方法? 这
我已经为我的按钮定义了一种样式,其中包含使用阴影来增加深度。我在网上读到这有时会导致文本模糊,但可以在 WPF4 中使用以下方法解决: TextOptions.TextFormattingMode="
我有一个 WPF 项目,其边框使用以下样式。计划是让发光效果在鼠标移过边框时淡入,在离开边框时淡出。
我有一个 Border,它由其他 UI 控件组成,例如 Canvas、Buttons、ComboBox 等。我只想在 Border 上有一个 DropShadowEffect,但所有子控件最终都会继承
我正在编写一个 WPF 自定义控件,它显示加载过程的叠加层。此自定义控件源自 ContentControl并重复使用它的 Effect显示投影的依赖属性。 然而,投影意外且意外地显示了两次。我试图找到
我有一个文本框,它在某个时候以编程方式添加到 Canvas ,我希望所有文本都具有投影效果,但我不希望该效果应用于文本框本身的边框。我该怎么做呢?向文本框添加 dropshadoweffect 将效果
我想覆盖 ContextMenu 的样式。 这是我的风格: #808080
我正在编写一个应用程序,它本质上是一堆松散的 xaml 屏幕 - 没有代码隐藏,只是在运行时动态链接到 ViewModel。 周末在一台旧电脑上运行这个程序时,发生了崩溃。跟踪和重新创建显示 igdu
我注意到 Windows Phone 7 的 Silverlight 中缺少效果属性,因此我进行了一些谷歌搜索,显然由于性能原因它被删除了。我基本上想做这样的事情
我是一名优秀的程序员,十分优秀!