您的位置:首页 > 编程语言 > Java开发

JavaFX灰度图像

2018-01-03 21:00 106 查看

处理获得灰度图像使用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类的库方法直接获取,第二种是自己获取像素,使用公式计算。效果一致。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息