我想知道在Swing中是否有某种方法可以将ImageIcon转换为灰度,如下所示:
component.setIcon(greyed(imageIcon));
Run Code Online (Sandbox Code Playgroud) 我正在计算图像红色分量的直方图,并将其存储在redhisto []中.数组的索引表示强度(0到255),值表示具有该强度的像素数.然后使用JFreeChart绘制这些值.
我的问题是:
我们可以更改图表中条形的颜色
代码是:
public class Histogram extends ApplicationFrame {
public Histogram(final String title) throws IOException {
super(title);
IntervalXYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private IntervalXYDataset createDataset() throws IOException {
BufferedImage imageA = ImageIO.read(new File("XYZ.bmp"));
int[] red = new int[imageA.getHeight()*imageA.getWidth()];
int[] redhisto = new int[256];
int[] pixel;
int k= 0;
for (int y = 0; y < imageA.getHeight(); y++) {
for (int x = 0; …Run Code Online (Sandbox Code Playgroud)此示例演示如何通过在每个数据集中添加空系列来避免双轴上的多个条重叠.通过以下示例,我创建了四个DefaultIntervalCategoryDataset对象,每个对象都在自己独立的轴上(完整代码如下).
在下图中可以看到在每个数据集中添加空系列的优点,例如,系列2与系列1保持分开.
但是,系列3仍然与系列4重叠,这就是系列3隐藏的原因(系列4).我找不到原因并得到解决方案.
如何避免这种过度重复,还有其他替代技术以更有效和方便的方式演示多类别问题(在我的问题中有间隔)?
public class IntervalBarChartTest extends ApplicationFrame {
public IntervalBarChartTest(String title) {
super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new Dimension(900, 270));
setContentPane(chartPanel);
}
private static DefaultIntervalCategoryDataset createDataset1() {
Number[] series1_Start = new Number[] {25,50};
Number[] series1_End = new Number[] {50,75};
Number[] dymmy1_Start = new Number[] {null,null};
Number[] dummy1_End = new Number[] {null,null};
Number[][] starts = new Number[][]{series1_Start,dymmy1_Start};
Number[][] ends = new Number[][] {series1_End,dummy1_End};
String[] categoryKeys = {"50th%ile", "90th%ile"};
String[] seriesKeys = {"Series1",""};
DefaultIntervalCategoryDataset dataset= new DefaultIntervalCategoryDataset(seriesKeys,categoryKeys,starts, ends);
return …Run Code Online (Sandbox Code Playgroud) 这是 JFrame
package client.connection;
import java.awt.Dimension;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import javax.swing.JFrame;
class DrawFrameRemoteControl extends JFrame
{
private DrawPanelRemoteControl imagePanel;
private ClientRemoteControlConnection clientRemoteControlConnection;
private ObjectInputStream clientInputStream;
private ObjectOutputStream clientOutputStream;
private Dimension imageDimension;
private Dimension serverDimension;
public DrawFrameRemoteControl(Dimension imageDimension,ClientRemoteControlConnection clientRemoteControlConnection,ObjectInputStream clientInputStream,ObjectOutputStream clientOutputStream,Dimension serverDimension)
{
super("Remote Desktop Control");
this.clientRemoteControlConnection=clientRemoteControlConnection;
this.clientInputStream=clientInputStream;
this.clientOutputStream=clientOutputStream;
this.imageDimension=imageDimension;
this.serverDimension=serverDimension;
imagePanel=new DrawPanelRemoteControl(imageDimension);
add(imagePanel);
setSize(imageDimension.width,imageDimension.height);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setLocationRelativeTo(null);
}
void drawNewImageGrayscale(byte[] array)
{
imagePanel.setNewImageGrayscale(array);
imagePanel.repaint();
}
}
Run Code Online (Sandbox Code Playgroud)
这是扩展的JPanel类 -
package client.connection;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit; …Run Code Online (Sandbox Code Playgroud) 我正在尝试用 Java 创建自定义动态直方图类型的条形图。我已经搜索了很多,但找不到实现这一目标的方法。
我知道JFreeChart库,但它不能满足我的需求。这是 JFreeChart 直方图的样子:

但我想要的是一个只有 X 轴的动态直方图。
这张经过Photoshop处理的图像将使其更容易理解。

JFrame 将有固定的边界。如您所见,应该没有 Y 轴。条形的高度应根据值自动调整。
请帮我建这个!提前致谢。
我正在尝试显示图像的直方图并仅显示一些颜色。我已经用 JFreeChart 和 createXYLineChart 做到了这一点,并通过遍历所有像素来获取所有数据。
为了加快速度,我正在尝试使用“createHistogram”来实现。我遵循了这个代码。
要使用新值更新图表,我使用了这两种方法:
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDataset(setHistogram(red, green, blue));
Run Code Online (Sandbox Code Playgroud)
作为 setHistogram 一个返回 HistogramDataset 的方法取决于哪个复选框被激活(布尔红色、绿色和蓝色)。
这按预期正常工作。
当我这样做时,我必须做的第二件事是更新每个系列的颜色,否则它们将获得默认值。我按照与值大致相同的程序进行了操作:
private void setHistogramColors(boolean red, boolean green, boolean blue) {
XYPlot plot = (XYPlot) chart.getPlot();
XYBarRenderer renderer = (XYBarRenderer) plot.getRenderer();
renderer.setBarPainter(new StandardXYBarPainter());
Paint[] paintArray = null;
if (red) {
if (green) {
if (blue) {
paintArray = new Paint[3];
paintArray[0] = new Color(0x80ff0000, true);// translucent red, green & blue
paintArray[1] = new Color(0x8000ff00, true);
paintArray[2] = new …Run Code Online (Sandbox Code Playgroud)