1

我无法创建一个将图片文件的名称作为命令行参数的 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();
                }
            }
        }
    }
4

0 回答 0