Сохранить рисунок в JComponent в файл Tiff - PullRequest
0 голосов
/ 07 октября 2009

Как сохранить рисунок в JComponent в формате TIFF? Я только знаю, как сохранить весь файл Java, но я не знаю, как сохранить определенный Jcomponent. Помоги мне: - (

Редакция: Спасибо, ребята, теперь я могу сохранить свой рисунок в формате JPEG.

Однако я просто хотел сохранить один из компонентов? c.paintAll(bufferedImage.getGraphics());, кажется, сохраняет весь компонент. Тем не менее, я просто хочу сохранить этот компонент c.add(new PaintSurface(), BorderLayout.CENTER); без panel.add(saveBtn); Как я могу это сделать? Спасибо.

Container c = getContentPane();
c.setLayout(new BorderLayout());      
Panel panel = new Panel();
panel.add(saveBtn);
c.add("South", panel);
c.setBackground(Color.WHITE);
c.add(new PaintSurface(), BorderLayout.CENTER);

Ответы [ 3 ]

1 голос
/ 07 октября 2009

Это, по сути, идентично решению broschb только с использованием правильного синтаксиса и фактическим вызовом соответствующих подпрограмм JAI.

public void saveComponentAsTiff(Component c, String filename, boolean subcomp) throws IOException {
    saveComponentTiff(c, "tiff", filename, subcomp);
}

public void saveComponent(Component c, String format, String filename, boolean subcomp) throws IOException {
    // Create a renderable image with the same width and height as the component
    BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);

    if(subcomp) {
        // Render the component and all its sub components
        c.paintAll(image.getGraphics());
    }
    else {
        // Render the component and ignoring its sub components
        c.paint(image.getGraphics());
    }

    // Save the image out to file
    ImageIO.write(image, format, new File(filename));
}

Документацию по различным функциям можно найти здесь:

Если вы хотите сохранить в формате, отличном от tiff, вы можете использовать ImageIO.getWriterFormatNames () , чтобы получить список всех форматов вывода изображения, загруженных в данный момент JRE.

ОБНОВЛЕНИЕ: Если вы не заинтересованы в рисовании подкомпонентов, вы можете заменить вызов Component.paintAll (...) на Component.paint (...). Я изменил пример кода, чтобы отразить это. Если для subcomp установить значение true с отображением подкомпонентов, а для false - игнорировать их.

0 голосов
/ 07 октября 2009

Класс ScreenImage позволяет сохранить изображение любого компонента.

0 голосов
/ 07 октября 2009

Вы можете получить изображение с буферизацией компонента или панель, содержащую чертеж, создав изображение с буферизацией размером с панель. Затем вы можете нарисовать содержимое панелей на буферизованное изображение. Затем вы можете использовать библиотеку JAI (Java Advanced Imaging) для сохранения буферизованного изображения в формате TIFF. Вам нужно будет проверить документы по этому здесь .

JComponent component;  //this is your already created component
BufferedImage image = new BufferedImage(component.getWidth(),
                                        component.getHeight(),
                                        Bufferedimage.TYPERGB)

Graphics g = image.getGraphics;
component.paintComponent(g);

Синтаксис может быть немного не в порядке, я не в курсе, но это общая идея. Затем вы можете использовать JAI и преобразовать буферизованное изображение в формат TIFF.

...