как изменить размер ImageView без сглаживания
я использую метод setScale и не знаю как отключить сглаживание
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.effect.ImageInput;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.image.PixelReader;
import javafx.scene.image.WritableImage;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javax.swing.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("size");
Pane pane = new Pane();
FileInputStream inputStream = new FileInputStream("coal_block.png");
Image image = new Image(inputStream);
ImageView imageView = new ImageView(image);
imageView.setScaleX(100);
imageView.setScaleY(100);
imageView.setSmooth(false);
pane.getChildren().add(imageView);
Scene scene = new Scene(pane, 1024,768);
primaryStage.setScene(scene);
primaryStage.show();
}
}
а вот что делает масштабирование
Ответы (2 шт):
Автор решения: talex
→ Ссылка
Нужно использовать Canvas
. Только он умеет на самом деле отключать сглаживание.
Вот пример:
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("size");
Pane pane = new Pane();
FileInputStream inputStream = new FileInputStream("coal_block.png");
Image image = new Image(inputStream);
ImageCanvas imageView = new ImageCanvas(image);
pane.getChildren().add(imageView);
imageView.widthProperty().bind(pane.widthProperty());
imageView.heightProperty().bind(pane.heightProperty());
Scene scene = new Scene(pane, 1024, 768);
primaryStage.setScene(scene);
primaryStage.show();
}
static class ImageCanvas extends Canvas {
private final Image image;
public ImageCanvas(Image image) {
this.image = image;
widthProperty().addListener(observable -> render());
heightProperty().addListener(observable -> render());
}
public void render() {
GraphicsContext gc = getGraphicsContext2D();
gc.setImageSmoothing(false);
gc.drawImage(image,
0, 0, image.getWidth(), image.getHeight(),
0, 0, getWidth(), getHeight());
}
}
}
Автор решения: Armàn
→ Ссылка
По умолчанию, ImageView
использует сглаживание при масштабировании изображения, но если вам нужно отключить сглаживание, установите это свойство в false
.
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
// Загружаем изображение
Image image = new Image("coal_block.png");
// Создаем ImageView и загружаем изображение
ImageView imageView = new ImageView(image);
// Устанавливаем размер ImageView
imageView.setFitWidth(200); // задаем ширину
imageView.setFitHeight(200); // задаем высоту
// Отключаем сглаживание при изменении размера
imageView.setSmooth(false);
// Создаем сцену и добавляем ImageView в нее
StackPane root = new StackPane(imageView);
Scene scene = new Scene(root, 400, 400);
// Настройки окна
primaryStage.setTitle("ImageView without smoothing");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}