Функции Java 5/6 бэкпорта к Java 1.4?

GetThumbnailImage будет работать, но если вы хотите немного лучшего качества, вы можете указать параметры изображения для класса BitMap и сохранить загруженное изображение в нем. Вот пример кода:

Image photo; // your uploaded image

Bitmap bmp = new Bitmap(resizeToWidth, resizeToHeight);
graphic = Graphics.FromImage(bmp);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(photo, 0, 0, resizeToWidth, resizeToHeight);
imageToSave = bmp;

Это обеспечивает лучшее качество, чем GetImageThumbnail из коробки

8
задан Peter Kofler 7 September 2010 в 18:09
поделиться

5 ответов

Спасибо за ответы. Вот краткое изложение всех соответствующих ответов и моих собственных исследований.

Изменение байт-кода: Retros
Это делается с помощью "ретро" -инструментов : Retrotranslator , Retroweaver и JBossRetro . Ретротранслятор кажется самым зрелым и активный из них инструмент. Эти инструменты сканируют все классы и изменяют байт-код, чтобы удалить функции Java 5 и 6. Поддерживаются многие функции Java5, некоторые с помощью сторонних библиотек обратного порта. Этот вариант наиболее популярен и имеет положительные отзывы пользователей. Эксперименты показали, что он работает как ожидается. См. Краткий обзор developerworks .

Pro: вы можете полностью разрабатывать на Java 5, создавать модули и все виды JAR. В конце вы просто преобразуете все классы в Java 1.4 и упаковываете свой EAR. Это легко сделать с помощью интеграции Maven Retrotranslator ( org.codehaus.mojo: retrotranslator-maven-plugin ).

Недостаток: консервативные среды не позволяют развертывать измененный байт-код. Результат ретро-шага не виден ни одному кодировщику и не может быть одобрен. Вторая проблема - это страх: может возникнуть какая-то загадочная проблема с производством, и ретро-код - еще один шаг, который можно обвинить в этом. Поставщики приложений-серверов может отказать в помощи из-за изменения байт-кода. Так что никто не хочет брать на себя ответственность использовать его в продакшене. Поскольку это скорее политический, чем технический проблема, поэтому я не вижу решения. Это случилось с нами, поэтому я искал дополнительные варианты: - (

Компиляция Java5 в Java 1.4: jsr14
Есть неподдерживаемый вариант, javac -source 1.5 и -target jsr14 , который компилирует исходный код Java5 в действительный байт-код Java 1.4. Большинство функций, таких как varargs или расширенный цикл for все равно транслируются компилятором. Общие и аннотации удалены. Перечисления не поддерживаются, и я не знаю насчет автобокса, поскольку методы valueOf в основном были введены в Java5.

Против: транслируется только байтовый код, использование библиотеки не изменяется. Таким образом, вы должны быть осторожны, чтобы не использовать API, специфичные для Java5 (но вы можете использовать Backports). Кроме того, вы должны создавать все модули одновременно, потому что во время разработки вам, вероятно, понадобится код Java5 с общей информацией и аннотациями. Таким образом, для производства Java 1.4 вам необходимо создать весь проект с нуля.

Возвращение исходного кода к Java 1.4: Declawer
Как указано в вопросе , существует Declawer , расширение компилятора, которое работает для дженериков и varargs, но не для расширенного цикла или автобокс. Сгенерированный исходный код "немного забавен, но не так уж плох".

Pro: Созданный источник доступен и может быть просмотрен. В худшем случае в этот источник могут быть внесены исправления. Нет никакой «магии», потому что источник действительно Java. Некоторые люди даже используют JAD (декомпилятор Java), чтобы снова получить исходный код Java 1.4. Вывод Jad доступен для чтения, если вы компилируете с отладкой. информации и не использовать внутренние классы.

Против: Подобно -target jsr14 , вам нужен дополнительный шаг в развертывании. Те же проблемы и с библиотеками.

Возвращение исходного кода к Java 1.4: вручную
В нескольких ответах предлагалось сделать это вручную. Для автоматического повторяющегося процесса сборки это, конечно, бесполезно, но для разовых изменений это разумно. Просто автоматизируйте то, что возможно. Возможно, посмотрите на Antlr для создания собственного инструмента преобразования.

Backported Libraries:
Проблема в том, что Java5 также поставляет новые библиотеки, которые недоступны в старых JRE, см. связанный вопрос . К счастью, есть несколько библиотеки с обратным переносом, которые предоставляют вам некоторые функции Java5, но не могут имитировать языковые функции, такие как общие.

  • Аннотации , обсуждаются на TSS
  • Concurrent
  • com.sun.net.httpserver (Java 6–5)
  • Запись Gif (Java 6–5)
  • Запустите свой собственный проект резервного копирования; -)
  • Вы можете скопировать нужные вам классы из JDK или других библиотек, но скорее всего, они связаны с другими классами.

Эмуляция функций Java5 в коде Java 1.4:
Я думал о некоторых вещах, которые вы могли бы сделать, чтобы облегчить себе жизнь, и все же оставались на Java 1.4. Наиболее важными функциями являются типизированные коллекции, вот несколько идей:

  • Вместо использования дженериков вы можете создать свои собственные типизированные контейнеры с некоторым шаблоном.
  • Добавить типизированный итератор (который больше не является итератором).
  • Добавить asList методы, которые позволяют 1,2, ..., n аргументов и их массив (для имитации varargs).
  • Методы для varargs (преобразование 1, ..., n аргументов в массивы) и valueOf можно поместить в некоторый вспомогательный класс.
11
ответ дан 5 December 2019 в 11:26
поделиться

предварительная компиляция исходного кода, удаление все 1.5 перед финальной компиляцией и развертывание. Есть ли инструменты кто может это сделать?

Да. Их называют ретротрансляторами или ретроткачами. Помимо Generics (которые в любом случае существуют только для компилятора), вы не можете просто «убрать 1.5 вещи». Перечисления (и, возможно, также некоторые другие функции) должны быть заменены функционально эквивалентным кодом. Именно это и делают эти инструменты.

2
ответ дан 5 December 2019 в 11:26
поделиться

Вы можете кодировать с функциями JDK 1.5 и использовать JDK 1.4 во время компиляции. См. Доступные параметры Javac. Однако большинство библиотек сейчас используют код JDK 1.5, поэтому вы застрянете со старыми библиотеками.

2
ответ дан 5 December 2019 в 11:26
поделиться

Стоит отметить, что в то время как Java 1.4 некоторое время была EOL. Java 5.0 будет EOL 8 октября 2009 года. Если кто-то обещает вам Java 5.0 к 2010 году, я бы спросил, почему?!

0
ответ дан 5 December 2019 в 11:26
поделиться

Для имитации аннотаций в java 1.4 вы можете использовать http://xdoclet.sourceforge.net/xdoclet/index.html

0
ответ дан 5 December 2019 в 11:26
поделиться
Другие вопросы по тегам:

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