是否可以在 JavaFX 2.2 中的 ImageView 中渲染缩放后的图像而不应用任何平滑?我正在使用setSmooth(false)将50x50图像渲染为200x200 ImageView,因此源图像中的每个像素都应映射到屏幕上的4x4正方形。
但是,生成的渲染仍然在所有16个目标像素上平滑源像素。有没有人知道一种方法可以做到这一点,而无需手动将每个像素复制到新图像中?
ImageView没有修复,但它对我帮助很大。在搜索了很久之后,我偶然发现了这篇文章:如何在JavaFX Canvas上禁用抗锯齿?
为了在画布上绘制图像,可以禁用平滑,因为JavaFX12
canvas.getGraphicsContext2D().setImageSmoothing(false);
我知道这有点旧,但我最近需要这样的ImageView,下面的小hack正是我在我的(Windows)机器上想要的。不能保证它在任何地方都有效。
import com.sun.javafx.sg.prism.NGImageView;
import com.sun.javafx.sg.prism.NGNode;
import com.sun.prism.Graphics;
import com.sun.prism.Texture;
import com.sun.prism.impl.BaseResourceFactory;
import com.sun.prism.Image;
import javafx.scene.image.ImageView;
@SuppressWarnings("restriction")
public class PixelatedImageView extends ImageView {
@Override protected NGNode impl_createPeer() {
return new NGImageView() {
private Image image;
@Override public void setImage(Object img) {
super.setImage(img);
image = (Image) img;
}
@Override protected void renderContent(Graphics g) {
BaseResourceFactory factory = (BaseResourceFactory) g.getResourceFactory();
Texture tex = factory.getCachedTexture(image, Texture.WrapMode.CLAMP_TO_EDGE);
tex.setLinearFiltering(false);
tex.unlock();
super.renderContent(g);
}
};
}
}
这里的诀窍是纹理被重用,因此线性滤镜设置保持“粘性”。然而,为什么NGImageView
不能简单地将“平滑”标志传递给纹理的线性滤镜设置,这超出了我的范围。
在 JavaFX 2.2 中,无论你向 ImageView
提供什么平滑提示,ImageView
总是会做一些平滑。
(基于使用带有ATI HD4600图形卡的Java 7u15和Windows 7进行测试)。
也许这是一个错误,即< code>ImageView将总是平滑< code>Image,但文档并没有真正指定平滑做什么或不做什么,所以很难说它的真正意图是什么。您可能希望在openjfx-dev邮件列表中发布这个问题的参考,或者在JavaFX问题跟踪器中记录一个问题,以便从开发人员那里获得更专业的意见。
我尝试了几种不同的方法来缩放图像:
ImageView
中缩放。ImageView
上的caleX/caleY属性进行缩放。Image
进行采样并使用PixelWriter创建新图像来缩放。我发现方法1
生成上述输出的示例代码。
更新实现您自己的图像过滤器的想法
JavaFX 效果与用于图像加载例程的滤镜不同,尽管可以创建用于滤波图像的效果。在 JavaFX 2.2 中,公开记录的 API 支持创建自定义效果,因此创建自定义效果可能很困难。
作为 openjfx 项目的一部分,用于图像支持的本机代码最近是开源的,因此您可以查看它以了解当前如何实现过滤。
您还可能希望针对JavaFX运行时项目提交一个功能请求,以“允许我们制作自己的2D过滤器”。
问题内容: 我可以使用以下内容滚动到200px 但是我想要一个平滑的滚动效果。我该怎么做呢? 问题答案: 现在,您可以使用来平滑滚动页面。 较旧的解决方案 您可以执行以下操作: ES6 递归方法:
问题内容: 我的问题几乎与此类似: 从矩阵平滑表面图 只是我的工具集是matplotlib和numpy(到目前为止)。 我已经成功生成了X,Y和Z网格以进行绘制 但是,由于这些值非常跳跃,因此看起来非常糟糕。 我想使事情变得平滑,至少使顶点连接或看起来像那样。 我的数据是这样生成的:我有一个函数 它根据x生成矩阵,计算其y次幂,选择列和行的子集,并计算最大奇异值。因此,Z [x,y]是svOfMa
我在tensorflow中实现了一个简单的线性回归。如果我将值的数量保持得非常小(小于8),它就可以正常工作。但是,一旦我做了大量(8个或更多样本),我就会得到NaN的。 这令人困惑,因为这是一个简单的回归,没有除法。成本是均方误差:仅除以固定整数(样本数)。此外,切换到平方和误差也会导致相同的问题。 Tensorflow NaN bug?不会有帮助,因为我的代码中没有分区或登录。 最后,添加会导
我想知道是否有任何本机的方法可以在预定的时间内“平滑滚动”。 为了举例说明我的问题,我希望一个高度为10000dp的垂直从底部滚动到顶部,滚动的时间与它从中部(5000dp)滚动到顶部的时间相同。 如果可以使用插值器,那就太棒了:) 找不到与
我已经编写了一些代码,可以从高度图中渲染3D世界,现在我也编写了允许行走的代码。问题是,当高度增加时,动画几乎“跳跃”,因为每个单元都相当大。有没有一种简单的方法可以让动画更流畅?(一般来说,我对OpenGL和3D渲染非常陌生,所以我不想讨论插值和更复杂的事情。)
下面是关于如何设置messenger机器人的Facebook教程-使用ngrok设置我的webhook。本地测试一切顺利,但在向bot发送消息时仍然没有收到任何响应。 韩国https://ngrok.com/ facebook教程https://developers.facebook.com/docs/messenger-platform/getting-started/quick-start/