我无法创建一个将图片文件的名称作为命令行参数的 java 类,将图片转换为灰度,并使用 StdDraw 绘制 256 个灰度强度中每一个的出现频率的直方图。
我已经完成了将图片转换为灰度的部分,但是在绘制 256 灰度强度的频率时遇到了麻烦。我不完全确定如何进行。这是我的代码
package grayscale;
import edu.princeton.cs.introcs.Picture;
import edu.princeton.cs.introcs.StdDraw;
import java.awt.Color;
public class Grayscale {
public static void main(String[] args) {
{
Picture pic = new Picture(args[0]);
int[] freq = new int[1000];
for (int i = 0; i < pic.height(); i++) {
for (int j = 0; j < pic.width(); j++) {
Color color = pic.get(i, j);
Color gray = Luminance.toGray(color);
pic.set(i, j, gray);
Color c = pic.get(i, j);
int r = c.getRed();
int g = c.getGreen();
int b = c.getBlue();
if (r == c.getRed()) {
freq[r]++;
}
if (g == c.getGreen()) {
freq[g]++;
}
if (b == c.getBlue()) {
freq[b]++;
}
if (i % 1000 == 0) {
StdDraw.setXscale(-1, pic.width());
StdDraw.setYscale(0, pic.height());
StdDraw.setPenRadius(.5 / pic.width());
for (int k = 0; k < pic.width(); k++) {
StdDraw.line(k, 0, k, freq[k]);
}
}
}
pic.show();
}
}
}
}