- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Java 应用程序,我需要在其中在图像上绘制文本。文本、字体和图像都是在运行时确定的。文字需要看起来漂亮,但在图像顶部可读(足够对比)。
为了满足这些要求,我创建了一个投影。这是通过在空白/透明 BufferedImage 上绘制不透明黑色文本,然后应用高斯模糊滤镜来完成的。然后,我再次在投影顶部以不透明的白色绘制文本。所以我有不透明的白色文本,周围有一个黑色模糊的阴影,很快就会消失到完全透明。然后我可以在背景图像之上绘制此图像。
我要解决的问题是投影看起来太透明了。因此,在明亮、繁忙的背景下,它没有给白色文本足够的分隔。
那么如何增加阴影的不透明度呢?我试过增加高斯模糊的半径,这会使阴影变宽,但不会使其更不透明。
我使用的代码基于 this DropShadowDemo罗曼盖伊。我使用他的 createDropShadow() 和 gaussianBlurFilter()。但是,我没有在 paintComponent()
期间分别绘制阴影和文本,而是提前将它们都绘制到 BufferedImage 上;我在 paintComponent()
期间在背景之上绘制了这个 BufferedImage。也许那是我的问题?但我看不出这会如何降低阴影的不透明度。我在 paintComponent()
期间没有使用 g2.setComposite()
。
我研究过使用某种 BufferedImageOp 来调整投影的不透明度。 ,例如 LookupOp。但是对于一个简单的调整来说似乎需要做很多工作(我猜是创建四个数字数组)。我不认为 RescaleOp 会起作用,因为我希望结果 alpha 与源 alpha 落在相同的范围内(0 到 1)。如果我可以指定一个 BufferedImageOp 来设置 new alpha = sqrt(old alpha) 或类似的东西,那将是理想的。但我不知道一个简单的方法来做到这一点。
代码的细节可以在这里看到:
我会在这里包含相关的代码块,但似乎相关的代码量太大(代码墙)......不妨只提供源文件的链接。
看起来像Change the alpha value of a BufferedImage?将是一种改变阴影不透明度的方法……基本上是逐个重新计算每个像素的 alpha 值。待定:它是否可移植(例如,64 位机器),以及它是否足够快。如果我对每个像素执行 a = sqrt(a)
或 a = sin(a * pi * 0.5)
(考虑 a
范围从 0 到 1),那会很慢吗?我很高兴知道是否有一种更简单的方法可以利用可用的优化,就像内置的 BufferedImageOps 大概做的那样。也许答案毕竟是为 LookupOp 构建数组。有人知道一些示例代码吗?
使用 LookupOp 解决;请参阅下面的代码。
最佳答案
下面是我最终使 BufferedImage 更加不透明的代码。我决定继续使用 LookupOp,而不是在每个像素上对 getRGB/setRGB 进行潜在的不可移植且缓慢的循环。设置查找数组的工作还不错。
/* Make alpha channel more opaque.
* Modify the alpha (opacity) channel so that values are higher, but still
* continuous and monotonically increasing.
*/
private static void adjustOpacity(BufferedImage shadowImage) {
// Use a lookup table with four arrays;
// the three for RGB are identity arrays (no change).
byte identityArray[] = new byte[256];
for (int i=0; i < 256; i++)
identityArray[i] = (byte)i;
byte alphaArray[] = new byte[256];
// map the range (0..256] to (0..pi/2]
double mapTo90Deg = Math.PI / 2.0 / 256.0;
for (int i=0; i < 256; i++) {
alphaArray[i] = (byte)(Math.sin(i * mapTo90Deg) * 256);
}
byte[][] tables = {
identityArray,
identityArray,
identityArray,
alphaArray
};
ByteLookupTable blut = new ByteLookupTable(0, tables);
LookupOp op = new LookupOp(blut, null);
// With LookupOp, it's ok for src and dest to be the same image.
op.filter(shadowImage, shadowImage);
}
它似乎有效(虽然我没有拍摄前后屏幕截图进行比较)。
关于java - 如何增加高斯模糊的不透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10088237/
我正在制作一个应用程序,我需要使用 ffmpeg 将两个视频文件叠加在另一个之上。 .我尝试了各种命令,但它所做的只是合并视频。 最佳答案 基本方法是 ffmpeg -i in1 -i in2 -fi
我将 Qt3D 与 offscreen renderer 结合使用并修改框架图以包含背景图像,例如 here . 不幸的是,使用 QPhongAlphaMaterial 为绘制在背景图像上的对象添加透
我正在开发的这个组件有视觉问题。它是带有 2 个 JTextField 和 2 个 JLabel 的 JPanel。我不能做坚实的背景。我尝试了几种不透明/背景颜色组合但没有成功。 我不允许附加图像,
我正在使用 Gnuplot 成功绘制一些时间序列数据。然而,该系列相当密集(大约 5 英寸空间中有 10,000 个样本),当我绘制多个系列时,很难看到绘制在顶部的系列下方。 有什么方法可以使线条具有
我正在尝试设置一个自定义拖动图标以在 NSTableView 中使用。一切似乎都正常,但由于我对 Quartz 缺乏经验,我遇到了问题。 - (NSImage *)dragImageForRowsWi
是否可以制作例如 20% 透明的 TMemo 或其他 vcl 组件?像 TButton 或 TEdit 吗? 在谷歌搜索解决方案时,我发现了这个: From Here ,然后我想,如果我在窗体上绘制图
我目前正在学习如何使用 Scenekit,并且遇到了透明对象的问题。我写了一个着色器来增加正面看脸时的透明度,当我选择白色背景时,一切都按预期工作...... transparency with wh
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我正试图让我的背景 webView 像那样透明: webView.setBackgroundColor(0x00000000); 但它不起作用,如果我添加这一行,一切都是透明的(我看不到我的 html
我目前正在创建一个应用程序并且出现了这个问题,我想让 TabLayout 透明。当我使用 RelativeLayout TabLayout 覆盖内容时,当我使用 LinearLayout TabLay
我有一个 UINavigationItem(不是 UINavigationBar),我想使其透明或不透明。这是在我建立从导航 Controller 到我的 UIViewController 子类的关系
是否可以让您的 android Activity 以透明模式在当前正在运行的 Activity 之上运行,以便您可以通过它看到它下面的 Activity ?如果可能,您可以设置不同级别的透明度吗? 最
我正在使用 noUiSlider 范围 slider 。这是 jsfiddle: https://jsfiddle.net/oun5p1xz/ behaviourSlider = document.g
有没有办法改变控制台的不透明度使其半透明? 还有办法将控制台的背景颜色更改为自定义颜色吗? 最佳答案 快速谷歌显示 this site其中包含用于具有透明窗口的控制台应用程序的代码。 本质上,您必须获
主.xml: 这是我的 main.xml,我试图使按钮最透明,但我仍然想看到它们,但我不知道要添加什么以及在哪里添加,请用低不透明度更正我的 xml在按钮
如何将实际内容 Pane 的背景设置为不透明,我添加到其中的面板我已经设置为不透明,但即使我这样做,选项卡 Pane 的主要区域仍显示为蓝色 JTabbedPane tabbedPane = new
是否可以继承颜色但覆盖不透明度值?以下是伪 CSS 中的示例: .color-class { background-color: rgba(255, 0, 0, 0); } .lighten
我正在尝试让我的导航栏变得 100% 透明,以便 UINavigationButtonItems 只可见并且背景(通常为白色)应该显示背景图像。 我试过了 HomeNavigationControll
RGBA 非常有趣,-webkit-gradient、-moz-gradient 和呃... progid:DXImageTransform.Microsoft.gradient 也是如此...是的。
我一直在尝试使用 AppBarLayout,但找不到使它的背景透明的方法。 我的意思是: 这是我的 XML: 如您所见,我使用的是颜色 #8000
我是一名优秀的程序员,十分优秀!