これはもう少し古いですが、私は最近、このようなImageViewの必要性があり、以下の小さなハックが私の(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
は、テクスチャの線形フィルタリング設定に「スムーズ」フラグを単に渡すことができなかったからです。
最大限の制御を得るためにCanvasを試すことができます。 –
残念ながら私はキャンバスでもそれを行う方法はないと思います。彼らが本当に必要とするのは、私たち自身の2Dフィルタを作ることです(JavaFXでは "Effects"と呼ばれていると思います)。 – ajselvig
自分のイメージフィルタを実装するアイデアを私の答えに更新しました。 – jewelsea