gpt4 book ai didi

java - 绘制图形直方图

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:30:20 24 4
gpt4 key购买 nike

我正在做一个项目,我想显示一个看起来像条形图的单线直方图,除了条形图中的每条线代表一个像素及其灰度值。

我有一个充满灰度值的数组,我只需要将它们放入这个直方图中并让它显示代表这些值的线..有点像这样

IMAGE             [minimize][maximize][close]



picture histogram

I
(Loaded Picture) I I
I I I
I I I I

[open][save]

下面是加载数组的代码...我只需要获取一些代码,这些代码将使用这些灰度值并将它们表示为像上面那样的条。

 public void showImage(File fileName) {
Scanner scan;
try {
scan = new Scanner(fileName);
typefile = scan.next();
iname = scan.next();
width = scan.nextInt();
height = scan.nextInt();
maxshade = scan.nextInt();
array = new int[width][height];


for(int r = 0; r < array.length; r++){
for(int c = 0; c < array[r].length; c++){
array[r][c] = scan.nextInt();




imageArray = array;
repaint();


} catch (FileNotFoundException e) {
e.printStackTrace();
}

}

我知道我必须做类似...

     int hist[] = new int[256];
for (int r = 0; r < array.length; r++)
for (int c = 0; c < array[r].length; c++)
hist[array[r][c]]++;

但我不知道从那里去哪里或如何绘制我的图表。

最佳答案

有点像

enter image description here

也许??

就个人而言,我仍然会使用类似 JFreeChart 的东西,但这是一个有趣的小练习...

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.util.Map;
import java.util.TreeMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestHisogram {
//http://stackoverflow.com/a/12520104/714968

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TestHisogram();
}
});
}

public TestHisogram() {
// For this example, I just randomised some data, you would
// Need to load it yourself...
int width = 256;
int height = 256;
int[][] data = new int[width][height];
for (int c = 0; c < height; c++) {
for (int r = 0; r < width; r++) {
data[c][r] = (int) (256 * Math.random());
}
}
Map<Integer, Integer> mapHistory = new TreeMap<Integer, Integer>();
for (int c = 0; c < data.length; c++) {
for (int r = 0; r < data[c].length; r++) {
int value = data[c][r];
int amount = 0;
if (mapHistory.containsKey(value)) {
amount = mapHistory.get(value);
amount++;
} else {
amount = 1;
}
mapHistory.put(value, amount);
}
}
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new JScrollPane(new Graph(mapHistory)));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

protected class Graph extends JPanel {

protected static final int MIN_BAR_WIDTH = 4;
private Map<Integer, Integer> mapHistory;

public Graph(Map<Integer, Integer> mapHistory) {
this.mapHistory = mapHistory;
int width = (mapHistory.size() * MIN_BAR_WIDTH) + 11;
Dimension minSize = new Dimension(width, 128);
Dimension prefSize = new Dimension(width, 256);
setMinimumSize(minSize);
setPreferredSize(prefSize);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (mapHistory != null) {
int xOffset = 5;
int yOffset = 5;
int width = getWidth() - 1 - (xOffset * 2);
int height = getHeight() - 1 - (yOffset * 2);
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(Color.DARK_GRAY);
g2d.drawRect(xOffset, yOffset, width, height);
int barWidth = Math.max(MIN_BAR_WIDTH,
(int) Math.floor((float) width
/ (float) mapHistory.size()));
System.out.println("width = " + width + "; size = "
+ mapHistory.size() + "; barWidth = " + barWidth);
int maxValue = 0;
for (Integer key : mapHistory.keySet()) {
int value = mapHistory.get(key);
maxValue = Math.max(maxValue, value);
}
int xPos = xOffset;
for (Integer key : mapHistory.keySet()) {
int value = mapHistory.get(key);
int barHeight = Math.round(((float) value
/ (float) maxValue) * height);
g2d.setColor(new Color(key, key, key));
int yPos = height + yOffset - barHeight;
//Rectangle bar = new Rectangle(xPos, yPos, barWidth, barHeight);
Rectangle2D bar = new Rectangle2D.Float(
xPos, yPos, barWidth, barHeight);
g2d.fill(bar);
g2d.setColor(Color.DARK_GRAY);
g2d.draw(bar);
xPos += barWidth;
}
g2d.dispose();
}
}
}
}

关于java - 绘制图形直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com