JavaFX灰度图像

处理获得灰度图像使用JavaFX类

代码如下:

import javafx.scene.image.PixelReader;
import javafx.scene.image.PixelWriter;
import javafx.scene.image.WritableImage;
import javafx.scene.paint.Color;

public class GrayImage {
    //获取灰度图
    public WritableImage getGrayByColor(WritableImage image) {
        int width = (int) image.getWidth();
        int height = (int) image.getHeight();

        WritableImage grayImage = new WritableImage(width,height);

        PixelReader pixelReader = image.getPixelReader();
        PixelWriter pixelWriterGray = grayImage.getPixelWriter();
        for(int i=0;i<width;i++) {
            for(int j=0;j<height;j++) {
                Color color = pixelReader.getColor(i, j);
                color = color.grayscale();
                pixelWriterGray.setColor(i,j,color);
            }
        }

        return grayImage;
    }

    //计算获取灰度图
    public WritableImage getGrayByFormula(WritableImage image) {
        int width = (int) image.getWidth();
        int height = (int) image.getHeight();

        WritableImage grayImage = new WritableImage(width,height);

        PixelReader pixelReader = image.getPixelReader();
        PixelWriter pixelWriterGray = grayImage.getPixelWriter();

        for(int i=0;i<width;i++) {
            for(int j=0;j<height;j++) {
                int color = pixelReader.getArgb(i, j);

                int r = (color >> 16) & 0xff;
                int g = (color >> 8) & 0xff;
                int b = color & 0xff;

                int gray = (int) (0.299 * r + 0.587 * g + 0.114 * b);

                int newPixel = argbToPixel(255, gray, gray, gray);

                pixelWriterGray.setArgb(i, j, newPixel);
            }
        }

        return grayImage;
    }

    private int argbToPixel(int alpha, int red, int green, int blue) {

        int newPixel = 0;
        newPixel += alpha;
        newPixel = newPixel << 8;
        newPixel += red;
        newPixel = newPixel << 8;
        newPixel += green;
        newPixel = newPixel << 8;
        newPixel += blue;

        return newPixel;

    }
}

效果如下:
这里写图片描述
代码中有两种方法,第一种是使用Color类的库方法直接获取,第二种是自己获取像素,使用公式计算。效果一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值