处理获得灰度图像使用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类的库方法直接获取,第二种是自己获取像素,使用公式计算。效果一致。