我的问题:我希望能够改变资源图像的亮度,并有三个实例作为ImageIcons。一个在50%的亮度(所以更暗),另一个在75%的亮度(稍微亮一点),最后一个在100%的亮度(与原始图像相同)。我还想保持透明度。
我试过的:我到处找了找,看起来最好的解决方案是使用rescaleop
,但我就是想不通。我不知道缩放因子和偏移量是怎么回事。这是我尝试的代码。
public void initialize(String imageLocation, float regularBrightness, float focusedBrightness, float pressedBrightness, String borderTitle) throws IOException {
BufferedImage bufferedImage = ImageIO.read(ButtonIcon.class.getResource(imageLocation));
setRegularIcon(getAlteredImageIcon(bufferedImage, regularBrightness));
setFocusedIcon(getAlteredImageIcon(bufferedImage, focusedBrightness));
setPressedIcon(getAlteredImageIcon(bufferedImage, pressedBrightness));
setTitle(borderTitle);
init();
}
private ImageIcon getAlteredImageIcon(BufferedImage bufferedImage, float brightness) {
RescaleOp rescaleOp = new RescaleOp(brightness, 0, null);
return new ImageIcon(rescaleOp.filter(bufferedImage, null));
}
呼叫将是这样的:
seeATemplateButton.initialize("/resources/templateIcon-regular.png", 100f, 75f, 50f, "See A Template");
//I think my 100f, 75f, 50f variables need to change, but whenever I change them it behaves unexpectedly (changes colors and stuff).
这段代码会发生什么:图像看起来是“不可见的”,我知道它在那里,因为它在一个JLabel上,上面有一个鼠标点击的事件,它工作得很好。如果我跳过亮度变化部分,说SetRegularIcon(new ImageIcon(button.class.getResource(imageLocation));
,它工作得很好,但显然不会更暗。
我认为我需要的是:一些帮助理解offset
、scalefactor
和filter
html" target="_blank">方法的含义/功能,以及为亮度变量提供的数字。
如有任何帮助,我们将不胜感激!谢谢!
医生说:
重新缩放操作的伪代码如下:
for each pixel from Source object {
for each band/component of the pixel {
dstElement = (srcElement*scaleFactor) + offset
}
}
只是对每个像素进行线性变换。该转换的参数为scalefactor
和offset
。如果您想要100%的亮度,这个转换必须是一个标识,即dstelement=srcelement
。设置scalefactor=1
和offset=0
就可以解决这个问题。
现在假设你想让图像变暗,像你说的那样在75%的亮度下。这等于将像素值乘以0.75。您需要:dstelement=0.75*srcelement
。因此,设置scaleFactor=0.75
和offset=0
就可以解决这个问题。您的值的问题是它们从0到100,您需要使用0到1之间的值。
问题内容: 我有图像序列。我需要这些图像的平均亮度。 第一个例子 (很慢): 第二个例子 (快) 这个例子非常快,但它改变了所有值HSV(我只需要更改V(亮度)) 问题答案: 只选择第三通道,然后修改这些元素 -
问题内容: 我想降低CSS中的图像亮度。我进行了很多搜索,但所能获得的只是关于如何更改不透明度的信息,但这会使图像更明亮。谁能帮我 ? 问题答案: 您要寻找的功能是。它能够执行多种图像效果,包括亮度: 注意,这只是最近才成为CSS的功能。它是可用的,但大量的浏览器在那里将不会支持它,和那些支持它需要供应商名称(即,等)。 也可以使用SVG进行这样的滤镜效果。SVG对这些效果的支持已经建立并得到广泛
我做了一个数组,所有的图像都在int中,我想在imageView中每3秒钟改变这些图像,我尝试了所有的解决方案,但显示了一些错误,我无法解决。 java文件(home.java) xml文件(home.xml)
我想有相同的svg(Transfer.svg)但不同的颜色只使用css,它必须兼容IE11,Edge,FF和Chrome。 提前谢谢你。
我看了其他答案,试着: 以及: 在类中,我把图像文件放在资源文件夹中,也放在与我的文件和我项目的根文件夹中,甚至在开始时包含了/符号URL字符串,但没有工作。我想知道最近有没有人尝试过并成功了?
这是我想出的一段方便的代码的自我问答。 目前,还没有一种简单的方法来嵌入SVG图像,然后通过CSS访问SVG元素。使用JS SVG框架的方法多种多样,但如果您所做的只是制作一个带有滚动状态的简单图标,那么这些方法就过于复杂了。 所以这里是我想出的,我认为这是迄今为止在一个网站上使用SVG文件的最简单的方法。它的概念来自早期的文本到图像的替换方法,但据我所知,SVG从来没有这样做过。 这就是问题所在