Создать изображение для фона в батик - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть метод, который генерирует массив байтов, который может быть представлен в виде двухмерного изображения.Я хотел бы показать это изображение в качестве фонового изображения в батик.Я не хочу сохранять массив на диск (как образ), а затем загружать его в батик.Вместо этого я хотел бы предоставить массив батику.Я думаю, что использование ParsedURLData может помочь мне, но я не могу понять, как заставить его работать.Любые предложения?

Я звоню ParsedURL.registerHandler(new MyProtocolHanlder("myprotocol")); и MyProtocolHanlder.parseURL возвращает MyParsedURLData.

Я думал, что возвращение моего собственного потока будет работать, но это не так.В приведенном ниже примере я просто загружаю изображение с диска и пытаюсь его отобразить.

class MyParsedURLData extends ParsedURLData {
    public MyParsedURLData() {
    }

    @Override
    public InputStream openStreamRaw(String arg0, Iterator arg1) throws IOException {
        return new File("some_image_here").toURI().toURL().openStream();
    }

}

Если в конструкторе для MyParsedURLData я установил protocol = "file" и path="another_image", тогда будет загружено другое изображение, какой бы поток не возвращал openStreamRaw.

Есть предложения?

1 Ответ

0 голосов
/ 06 декабря 2011

Самый простой способ - сохранить изображение во временном файле, а затем просто сослаться на него через File.toURI().toURL(), и Батик загрузит его.Вам не нужен специальный обработчик протокола или ParsedURL для этого.Выберите стандартный формат изображения, поддерживаемый Batik, например PNG или JPEG для временного файла!

Вы можете сохранить временный файл, применив как ParsedURLProtocolHandler, так и RegistryEntry и зарегистрировав их вБатик.На веб-сайте есть немного документации по этому вопросу, но это все еще трудно сделать.Мне потребовалось несколько часов, чтобы выяснить (и код на самом деле не готов к совместному использованию), но теперь я могу передать BufferedImage непосредственно в Batik, не кодируя его сначала как .png или подобный файл.

...