Преобразуйте JPanel для обработки изображений

Просто обратившись к треугольным нарушениям неравенства, надо надеяться, дополнительным фактором, для которого они оптимизируют, является здравый смысл. Вы не обязательно хотите самый короткий или самый быстрый маршрут, поскольку он может привести к хаос и разрушение . Если Вы хотите, чтобы Ваши направления предпочли главные маршруты, которые благоприятны для грузовика и могут справиться с отправлением каждого sat-nav-following драйвера вниз их, Вы быстро отбрасываете треугольное неравенство [1].

, Если Y является узкой жилой улицей между X и Z, Вы, вероятно, только хотите использовать ярлык через Y, если пользователь явно просит X-Y-Z. Если они просят X-Z, они должны придерживаться главных дорог, даже если это немного далее и берет немного дольше. Это подобно парадокс Braess - если все пытаются следовать самым коротким, самым быстрым маршрутом, получающаяся перегрузка означает, что это не самый быстрый маршрут ни для кого больше. Отсюда мы отклоняемся от теории графов в теорию игр.

[1] На самом деле, любая надежда, что произведенные расстояния будут функцией расстояния в математическом смысле, умирает, когда Вы позволяете односторонние дороги и теряете требование симметрии. Потеря треугольного неравенства также просто втирает соль в рану.

15
задан Jeff Storey 28 August 2009 в 20:38
поделиться

3 ответа

From the BufferedImage you can create a graphics object, which you can use to call paint on the JPanel, something like:

public BufferedImage createImage(JPanel panel) {

    int w = panel.getWidth();
    int h = panel.getHeight();
    BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    Graphics2D g = bi.createGraphics();
    panel.paint(g);
    g.dispose();
    return bi;
}

You may need to make sure you set the size of the panel first.

28
ответ дан 1 December 2019 в 01:38
поделиться

В основном я создаю компонент что нужно записать в изображение но не отображается

ScreenImage объясняет, как делать то, что вы хотите.


Соответствующий раздел ScreenImage.java (с небольшими изменениями). layoutComponent заставляет все кнопки появляться на изображении.

/**
 * @return Renders argument onto a new BufferedImage
 */
public BufferedImage createImage(JPanel panel, int width, int height) {
    BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g = bi.createGraphics();
    panel.setSize(width, height); // or panel.getPreferedSize()
    layoutComponent(panel);
    panel.print(g);
    g.dispose();
    return bi;
}

private void layoutComponent(Component component) {
    synchronized (component.getTreeLock()) {
        component.doLayout();

        if (component instanceof Container) {
            for (Component child : ((Container) component).getComponents()) {
                layoutComponent(child);
            }
        }
    }
}
4
ответ дан 1 December 2019 в 01:38
поделиться

Взгляните на BasicTableUI. Средство визуализации ячеек рисуется на изображении без отображения, а затем на видимом компоненте таблицы.

0
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: