【发布时间】:2016-03-30 16:39:44
【问题描述】:
我知道有类似的问题,但这些问题没有回答我的问题。如标题所示,我使用的是 JavaFX Image 类,而不是 bufferedImage。
我使用了this其他问题的答案,但结果图像为空。
这是我的代码:
public static Image toGrayScale(Image sourceImage) {
PixelReader pixelReader = sourceImage.getPixelReader();
int width = (int) sourceImage.getWidth();
int height = (int) sourceImage.getHeight();
WritableImage grayImage = new WritableImage(width, height);
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int pixel = pixelReader.getArgb(x, y);
int red = ((pixel >> 16) & 0xff);
int green = ((pixel >> 8) & 0xff);
int blue = (pixel & 0xff);
int grayLevel = (int) (0.2162 * red + 0.7152 * green + 0.0722 * blue) / 3;
int gray = (grayLevel << 16) + (grayLevel << 8) + grayLevel;
grayImage.getPixelWriter().setArgb(x, y, gray);
}
return grayImage;
}
谁能告诉我问题出在哪里。
【问题讨论】:
-
你缺少一个括号来关闭你的内部 for 循环。
-
@jewelsea,谢谢,但这不是我想要的。
-
@ManoDestra,那是我的错误。在我的原始源代码中,所有的括号都是关闭的。
-
您确定需要在
int grayLevel = (int) (0.2162 * red + 0.7152 * green + 0.0722 * blue) / 3;中除以3?在我看来,如果red = green = blue = 0xff0xff / 3,你会得到一些东西