Как правильно получить изображение из буфера обмена в JavaFX;В чем разница между приложениями, которые борются, и теми, которые не борются? - PullRequest
0 голосов
/ 05 марта 2019

Проблема

По умолчанию JavaFX получает изображение из буфера обмена Windows,

Clipboard.getSystemClipboard().getImage();

, похоже, не работает.

Кажется, что-то не так спрозрачность изображения.Если изображение установлено на черном фоне, изображение выглядит нормально, но на белом фоне ничего не отображается.

Showing the JavaFX image transparency issue by changing the background of the application from dark to light.

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

Среда: Windows 7, обновление Java 8 202

Что я знаю

Ниже я опишувещи, которые я уже знаю.

Есть другие люди, которые задавали подобные вопросы:

Тем не менее, никто не получил в центре проблемы или не получил ответ.

Нет ОфициальныйОшибка

Кажется, я не могу найти ошибку, связанную с этой проблемой, в Java Bug Database .

Нет проблем для AWT

Эта проблема сизображения не появляются в буфере обмена AWT, но я хочу решение, которое использует буфер обмена JavaFX .

On the right is the image from AWT's clipboard, on the left is the same image from JavaFX's clipboard.

Буфер обмена содержит несколько форматов

Я знаю, что буфер обмена Windows содержит несколько версий одной и той же вещи, только в разных форматах.Это легко увидеть, используя InsideClipboard или Free Clipboard Viewer .

A screenshot of InsideClipboard, showing the CF_DIB format.

Буфер обмена JavaFX распознает определенныеформаты;иногда это имеет разные названия для них.application/x-java-rawimage - это то, что Java считает изображением;в коде вы упоминаете это как DataFormat.IMAGE.

Я подозреваю, что формат буфера обмена DIB в Windows совпадает с application/x-java-rawimage в Java, но не может найти доказательства этого в исходном коде.

Проблема широко распространена

Проблемные приложения

JavaFX, похоже, имеет ту же проблему прозрачности с различными приложениями, которые копируют изображение в буфер обмена:

Приложения без проблем

Я также нашел некоторые приложения, которые копируют изображение в буфер обмена, и JavaFX может извлечь его, используя метод по умолчанию, без проблем:

  • Paint.net
  • Кнопка PrtScn
  • Инструмент Windows Snipping Tool
  • Google Chrome 72.0.3626.121 (копирование Google.com логотип)

Ответ

Адекватный ответ должен

  • объяснить просто , конкретно и с примерами , почему проблема возникает с некоторыми приложениями, но не с другими, и
  • выясняет, где что-то не так в реализации JDK, и показывает, как конкретноисправить упомянутую реализацию для большинства проблемных приложений, не нарушая ее для приложений, которые уже работают.
    • Если невозможно изменить реализацию JDK, адекватный ответ предоставит Минимальный, Полный и Проверяемый пример , показывающий код JavaFX, который создает Image из буфера обмена JavaFX, когдаИзображение скопировано из Adobe Reader.

Если вы не можете помочь, но думаете, что это хорошо изученный вопрос, подумайте о голосовании или поделитесь имс другом.

...