LINUX.ORG.RU

Картинка в буфер обмена

 , , , ,


0

1

У меня есть массив байт, в котором находится картинка. Не могу разобраться, как мне поместить ее в буфер обмена CLIPBOARD (другая задача взять из него). Для обычного текста у меня все реализовано (с++), а с картинкой ничего не понятно. Примеры найти не могу. Какие атомы надо использовать BITMAP или может PIXMAP? Подскажите, кто в теме или посоветуйте ресурс.

Заранее спасибо!



Последнее исправление: PaulSev (всего исправлений: 5)

Ответ на: комментарий от anonymous2

Мне необходимо реализовать на С++, а не в консоли. Я так понимаю, что массив с байтами картинки мне нужно сохранить в одном из форматов bmp, png или jpeg, а затем уже использовать соответствующий атом?

PaulSev
() автор топика
6 октября 2024 г.
Ответ на: комментарий от anonymous2

атомы на «image/bmp», «image/jpeg», «image/png» и т.д. см через команду xclip -target TARGETS -selection clipboard

Спасибо, именно это весь вечер искал!

Только одна неясность: почему это работает только для image/png, image/jpeg, image/bmp, image/x-bmp, image/x-MS-bmp?

$ xclip -out -selection clipboard -t TARGETS
TIMESTAMP
TARGETS
MULTIPLE
SAVE_TARGETS
image/png
image/jpeg
image/bmp
image/x-bmp
image/x-MS-bmp
image/x-icon
image/x-ico
image/x-win-bitmap
image/vnd.microsoft.icon
application/ico
image/ico
image/icon
text/ico
image/jxl
image/tiff
$ xclip -out -selection clipboard -verbose -t image/x-win-bitmap > img4.bmp
Connected to X server.
Using selection: XA_CLIPBOARD
Using image/x-win-bitmap.
Error: target image/x-win-bitmap not available

В буфере — битмап, скопированный из Фаерфокса средствами Фаерфокса.

question4 ★★★★★
()
Ответ на: комментарий от question4

Только одна неясность: почему это работает только для image/png, image/jpeg, image/bmp, image/x-bmp, image/x-MS-bmp?

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

anonymous2 ★★★★★
()
Ответ на: комментарий от anonymous2

эти атомы регистрирует программа источник буфера обмена

Источник — Firefox?

ты можешь делать другие

«Ты» — это кто?

программа клиент буфера обмена запросит какой ему нужно

Клиент — xclip?

ты получаешь запрос и делаешь конвертирование формата

Кто получает и от кого? xclip запрашивает stdout? Что поставить в пайп, чтобы могло понять? ImageMagic сможет?

Почему это работает для одних MIME-типов BMP, и не работает для других?

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)
Ответ на: комментарий от question4

«Ты» — это кто?

тыжепрограммист?

как работает буфер обмена

https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html

Почему это работает для одних MIME-типов BMP, и не работает для других?

Потому что это не mime типы, этотопросто строки, наименования атомов, да в эти строки можно запихать mime тип но клиент буфера обмена должен об этом знать что запросить.

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

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 5)
Ответ на: комментарий от anonymous2

https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html

Спасибо.

Почему это работает для одних MIME-типов BMP, и не работает для других?

это не mime типы, это просто строки, наименования атомов, да в эти строки можно запихать mime тип но клиент буфера обмена должен об этом знать что запросить.

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

Я правильно понял, что атом ‘image/x-win-bitmap’ зарегистрирован браузером? Я правильно понял, что на запрос этого атома он отвечает отказом? Баг браузера?

И ещё несколько вопросов:

  1. Зачем MULTIPLE? Должен ли он отдавать какие-то данные? Или он добавляется в список просто чтобы указать, что доступно несколько форматов?

  2. Как пользоваться TIMESTAMP? Всегда ли он есть? Можно ли в цикле по таймеру читать TIMESTAMP и таким образом проверять, не изменилось ли содержимое буфера?

  3. SAVE_TARGETS

question4 ★★★★★
()
Последнее исправление: question4 (всего исправлений: 1)