Graphics.drawImage () в Java является ЧРЕЗВЫЧАЙНО медленным на некоторых компьютерах еще намного быстрее на других

Вот как я это разрешил:

  1. Удалил папку bin в каталоге проекта.
  2. Нажмите Build Solution. В VS2017 (Запуск от имени администратора)> Сборка> Создание решения.
15
задан 18 March 2009 в 14:40
поделиться

6 ответов

При использовании попытки Java солнца некоторые следующие системные свойства, или как параметры командной строки или как первые строки в основном

sun.java2d.opengl=true  //force ogl  
sun.java2d.ddscale=true //only when using direct3d  
sun.java2d.translaccel=true //only when using direct3d  
[еще 114], флаги могут быть просмотрены в этот Взгляд страницы

sun.java2d.trace, который может позволить Вам определять источник меньше желательной производительности при обработке графики.

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

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

, Если Вы имеете какой-либо контроль над тем, как изображение хранится, необходимо сохранить его в формате, который ищет экран. Вот некоторый пример кода:

    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice device = env.getDefaultScreenDevice();
    GraphicsConfiguration config = device.getDefaultConfiguration();
    BufferedImage buffy = config.createCompatibleImage(width, height, Transparency.TRANSLUCENT);
    Graphics g = buffy.getGraphics();

, Если Вы собираетесь нарисовать изображение много раз, это может стоить преобразовать в совместимый формат, даже если это прибыло в некоторый другой формат.

Рисунок изображение также будет медленнее при преобразовании его, как Вы тянете, который часть 'изменения размеров' Вашего описания заставляет меня думать, что Вы могли бы быть. Снова, сделайте изменение размеры однажды (когда окно изменено), и кэшируйте измененное и совместимое изображение так, чтобы оно могло быть перерисовано быстро.

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

Как Вы судите питание компьютеров? 50x25 K 32-разрядное изображение берет больше чем 4,5 ГБ RAM для содержания в памяти (50000 * 25000 * 4 байта). Если один компьютер имеет больше RAM, чем другой, который может иметь огромное значение в скорости, потому что это не должно будет подкачивать к диску как часто. Необходимо рассмотреть подразделы захвата изображения и работы с теми вместо всего этого.

Редактирование: Вы использующий последний Java & графические драйверы? Если Ваше изображение только 5Kx2.5K, единственная вещь, о которой я могу думать, состоит в том, что оно делает его без любого аппаратного ускорения.

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

Существует несколько вещей, которые могли влиять на производительность здесь:

  • Доступная скорость ЦП RAM
  • Видеокарта (на борту или отдельный)
  • версия
  • Java Графического драйвера
  • Используемый режим видео (разрешение, битовая глубина, ускоряющая поддержка)

РЕДАКТИРОВАНИЕ: Взглянув на отредактированный вопрос, я предложил бы проверить, имеет ли 9600GS система новейшие установленные драйверы NVIDIA. Я недавно установил драйвер для Intel встроенная видеокарта, которая заменила универсальный драйвер Windows и сделала движущиеся окна, смотря видео, просмотрев и т.д. намного быстрее.

Все другие спецификации выглядят хорошими. Возможно, Java не обнаруживает 9600GS и не использует аппаратное ускорение, но я сомневаюсь относительно этого.

Также проверяют конфигурацию ОС. В Windows можно выключить аппаратное ускорение для отладки целей.

, Конечно, лучший способ обработать это должно было бы измениться, Ваш код - изменяют размеры изображения или разделяют его на блоки как предложенный DNS. Вы никогда не будете в состоянии видеть целое изображение, как это находится на экране.

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

Проверьте экранные настройки. Моя ставка - то, что пиксельная глубина отличается в этих двух системах, и что медленному связали нечетную пиксельную глубину с объектом изображения, который Вы пытаетесь отобразить.

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

Так как Java использует OpenGL, чтобы сделать 2D рисунок , производительность Вашего приложения будет затронута производительностью OpenGL графического процессора в соответствующем компьютере. Поддержка OpenGL истощается в 3D промышленности, что означает, что (иронически) более новые микросхемы могут быть медленнее при рендеринге OpenGL, чем более старые - не только из-за аппаратных средств, но также и драйверов.

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

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