- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 JavaFX,我尝试将文本绘制到 Canvas 上,并将投影和反射效果链接在一起。
以下代码将显示反射的红色文本,然后将投影应用于原始文本和反射文本。
Canvas canvas = new Canvas(400,400);
GraphicsContext context = canvas.getGraphicsContext2D();
context.setFont( new Font("Arial Bold", 48) );
context.setFill(Color.RED);
DropShadow shadow = new DropShadow(6, 2, 2, Color.BLACK);
Reflection reflect = new Reflection(10, 1.0, 1.0, 0.0);
shadow.setInput(reflect);
context.setEffect(shadow);
context.fillText("Hello, world!", 100,100);
但是,投影在反射中出现“向后”,因为需要首先应用阴影才能获得逼真的效果。我尝试通过颠倒应用效果的顺序来实现此目的,方法是更改上面的 setInput
和 setEffect
代码行,如下所示:
reflect.setInput(shadow);
context.setEffect(reflect);
但是,结果是只应用了反射;我根本看不到任何阴影。
为什么没有应用阴影/不可见?
如何重写此代码以达到所需的效果(如果可能,仅使用效果组合)?
最佳答案
我不知道你所说的是否可以通过使用带有标准API的GraphicsContext
来实现,所以欢迎其他答案。但是,这可能是一个临时解决方法,前提是它确实是您所需要的。首先应用阴影,然后逐像素复制图像以模仿反射效果。请参阅下面的屏幕截图:(原始 - 左侧,新 - 右侧)。
下面附有完整的工作示例。它需要一些调整才能获得通用解决方案,但应该有足够的开始。
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.Effect;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class FXApp extends Application {
private Parent createContent() {
Canvas canvas = new Canvas(400,400);
Font font = new Font("Arial Bold", 48);
Color fill = Color.RED;
DropShadow shadow = new DropShadow(6, 2, 2, Color.BLACK);
fillTextWithReflection(canvas.getGraphicsContext2D(), "Hello, world!", 100, 100, font, fill, shadow);
return new Pane(canvas);
}
private void fillTextWithReflection(GraphicsContext g, String text, double textX, double textY, Font font, Color fill, Effect effect) {
Text t = new Text(text);
t.setFont(font);
// 5 px margin
Canvas tmpCanvas = new Canvas(t.getLayoutBounds().getWidth() + 5, t.getLayoutBounds().getHeight() + 5);
// set configuration
GraphicsContext tmpContext = tmpCanvas.getGraphicsContext2D();
tmpContext.setFont(font);
tmpContext.setFill(fill);
tmpContext.setEffect(effect);
// draw on temporary context
tmpContext.fillText(text, 0, font.getSize());
// take a snapshot of the text
WritableImage snapshot = tmpCanvas.snapshot(null, null);
int w = (int)snapshot.getWidth();
int h = (int)snapshot.getHeight();
WritableImage reflected = new WritableImage(w, h);
// make an 'inverted' copy
for (int y = 0; y < h; y++) {
// imitate fading out of reflection
double alpha = y / (h - 1.0);
for (int x = 0; x < w; x++) {
Color oldColor = snapshot.getPixelReader().getColor(x, y);
Color newColor = Color.color(oldColor.getRed(), oldColor.getGreen(), oldColor.getBlue(), alpha);
reflected.getPixelWriter().setColor(x, h - 1 - y, newColor);
}
}
// draw on the actual context
// images are drawn from x, y top-left but text is filled from x, y + h
// hence corrections
// this can be replaced with actual fillText() call if required
g.drawImage(snapshot, textX, textY - font.getSize());
g.drawImage(reflected, textX, textY + h - font.getSize());
}
@Override
public void start(Stage stage) throws Exception {
stage.setScene(new Scene(createContent()));
stage.show();
}
}
关于java - 在 JavaFX 中将反射应用于 DropShadow 效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771027/
现在如果我点击按钮 A,按钮 B 会显示 DropShadow 效果: Private Sub ButtonA_Click(ByVal sender As System.Object, ByVal
我有一个圆 Angular 矩形,我正在尝试对其应用 1px 模糊、1px 垂直偏移投影。我的问题是底部的阴影看起来比侧面的阴影厚得多。有没有办法纠正这个问题,使底部阴影与侧面的宽度相同?我想过使用
完成了一个在我的 CSS 中使用投影的网站。我利用在线工具生成语法 ( http://css3generator.com/ ) 然后在拼图上验证我的网站时,我反复收到关于阴影的验证错误。我做了一些研究
我有一个 WindowStyle 设置为无的 WPF 窗口。有什么方法可以强制此窗口投下阴影(就像 WindowStyle 不是 none 时得到的那样)?我不想将 AllowTransparency
我正在使用 创建自定义窗口表单混合 . (通过设置 AllowTransparency 到 True ) 我已经完成了设计,效果很好。现在我想给它添加阴影效果。 ( DropShadowEffect
我有一个 UWP 应用程序,我应该首先指出它使用很少的 XAML。这些 View 是根据从 API 接收到的 JSON 对象构建的。这意味着绝大多数事情都是在 C# 中完成的,因此给我的问题增加了一点
在我正在 JavaFX 中开发的游戏中,我有带有 Label 的卡片( DropShadow s) s。卡片可以移动,当它们移动时,阴影会留下一条微弱的痕迹。我尝试过使用Node#setCache(b
有没有人试过用 python wand 创建阴影?我浏览了这个文档,找不到 dropshadow 属性。 http://docs.wand-py.org/en/0.4.1/wand/drawing.h
我有一个带有自定义窗口边框的 WPF 应用程序 (.NET Framework 4)。我使用 WPF Shell Integration Library 禁用了玻璃边框, 并绘制我自己的边框。但是,我
我正在尝试在以编程方式添加的 UITableView 上设置投影。 框架高度被设置为屏幕的特定百分比。所以我想在 tableview 本身上设置一个阴影。 我尝试执行以下操作: tableview_r
我试图用 BackDropFilter 做一些像堆栈中的两个图像(其中一个显然用黑色填充)。但结果模糊了堆栈下面的所有内容(甚至在图像的 alpha 区域)。我已经搜索过这种效果,但还没有找到答案。如
使用 JavaFX,我尝试将文本绘制到 Canvas 上,并将投影和反射效果链接在一起。 以下代码将显示反射的红色文本,然后将投影应用于原始文本和反射文本。 Canvas canvas = new C
我一直在整个互联网上搜索这个,但是对于我看到的大多数用 CSS 回答的问题,人们只是给出了代码而没有解释它们。 -fx-effect: dropshadow(gaussian, rgba(0, 0,
似乎无法让 jquery.dropshadow.js 在正确的选择器上工作。我试图选择 id,但我无法让它工作。我也试过这门课(见下文)。 头 window.onload = functi
Short Version: 目标:在 C# 中的无边界 WinForm 中深沉、黑暗的 Windows 7 阴影 已知的现有解决方案 1: 使用 CreateParams 的简单 XP 风格投影。
我有以下模仿 facebook 的菜单样式布局。我想在左侧有一个阴影,如下所示,但是我使用的带有图层阴影的代码使应用程序变得迟缓。我一直无法找到一个好的替代解决方案。有没有人有创建不影响应用程序性能的
这有点让我发疯。将 DropShadowEffect 添加到按钮。在 IDE 中它看起来像这样: 第二个按钮供引用,没有DropShadowEffect。如您所见,接下来没有区别。然后我构建项目,当它
我目前正在尝试在一些填充路径上使用一些不同的阴影来创建多级发光效果。 但是,当尝试恢复上下文时,它不遵循恢复函数,而是将最后一个 dropshadow 的 ShadowColor 和 ShadowBl
我正在制作一个绘画程序,但用户制作的绘图周围有一个 DropShadow 。当它们删除时,它也会删除 DropShadow。如果我尝试重新应用 DropShadow (使其围绕绘图的新边界),它会起作
在合成中使用投影时,我收到了不良效果。要重现此问题,请按照下列步骤操作: 第 1 步:创建一个新的 UWP 项目并定位 Windows 10 Fall Creators Update(10.0;Bui
我是一名优秀的程序员,十分优秀!