首页 > 解决方案 > 如何使用 JavaFX 对图像进行像素化?

问题描述

我想用 JavaFx 对图像进行像素化。我的问题是我最后只有一个写入像素,所以它只能工作一次。

我试过了

这是我的代码:

Image img = imgView.getImage();
        PixelReader pixelReader = img.getPixelReader();

        WritableImage wImage = new WritableImage(
                (int) img.getWidth(),
                (int) img.getHeight());

        PixelWriter pixelWriter = wImage.getPixelWriter();


        for (int y = 1; y < img.getHeight(); y += 3) {
            for (int x = 1; x < img.getWidth(); x += 3) {
                Color px = pixelReader.getColor(x, y);


                float red = (float) px.getRed();
                float green = (float) px.getGreen();
                float blue = (float) px.getBlue();

                Color all = new Color(red / 3, green / 3, blue / 3, 1);


                for (int u = 0; u <= 3; u++) {
                    for (int i = 0; i <= 3; i++) {
                        pixelWriter.setColor(u, i, all);
                    }
                }


            }

        }

标签: javaimagejavafx

解决方案


只需检查设置颜色的部分:

                for (int u = 0; u <= 3; u++) {
                    for (int i = 0; i <= 3; i++) {
                        pixelWriter.setColor(u, i, all);
                    }
                }

如您所见,您始终将像素的颜色设置为 (0,0) - (3,3)。你需要使用

                     pixelWriter.setColor(x + u, y + i, all);

但是,您需要确保不会尝试设置图像外部某些像素的颜色。通过 x、y、u 和 i 检查循环的边界。


推荐阅读