我正在尝试在JavaFX的画布上绘制缩放后的图像。使用以下代码:
Image image = ...;
canvas.setWidth(scale * width);
canvas.setHeight(scale * height);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.drawImage(image, 0, 0, scale * width, scale * height);
// this gives same result
// gc.scale(scale, scale);
// gc.drawImage(editableImage, 0, 0, width, height);
它工作速度非常快,但会产生像这样的模糊图像: 这不是我想要看到的。相反,我想要得到这张图片:
可以通过手动设置每个像素的颜色来绘制,使用以下代码:
PixelReader reader = image.getPixelReader();
PixelWriter writer = gc.getPixelWriter();
for (int y = 0; y < scale * height; ++y) {
for (int x = 0; x < scale * width; ++x) {
writer.setArgb(x, y, reader.getArgb(x / scale, y / scale));
}
}
但是我不能使用这种方法,因为它太慢了。将1Kb图像缩放8倍需要几秒钟的时间。所以我想知道是否有任何方法可以在canvas上绘制时禁用这种模糊效果?