LINUX.ORG.RU
ФорумTalks

Хочу написать скриншотер

 , , , ,


2

3

Привет. Увидел новость про скриншотер и решил написать свой с минимальным набором функций.
Там куча проблем граблей с wayland. На чем писать чтобы не было зависимости от оконного менеджера? QT, GTK, boost?
Начну как лабораторки по учебе а потом может и линукс примут пакетом.

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

cocucka_B_TECTE
()
Ответ на: комментарий от Mirage1_

Тут больше не проблема распечатать картинку как таковую, а в том как ее на бумаге разместить. В те времена это было довольно тривиально, а нынче у всех по несколько 4к дисплеев.

cocucka_B_TECTE
()

А я всем всё испорчу (в т.ч. ТС-у) и дам готовое решение на Qt5:

bool MainWindow::takeScreenshot() {
	const QWindow *window = windowHandle();
	// Before window is shown for the first time, window == NULL.
	QScreen *screen = window != NULL ? window->screen() : QApplication::primaryScreen();
	if (!screen) {
		QMessageBox::critical(this, appName, "Internal error: failed to get screen.");
		return false;
	}
	originalPixmap = screen->grabWindow(0);
	updatePreviewLabel();
	return true;
}
dimgel ★★★★★
()

По-хорошему, ты вообще не должен его писать ни на Qt ни на GTK, это все в основном для отрисовки интерфейса.

Я ж надеюсь ты не собираешься писать что-то типа xfce-убожества, которое прежде чем сделать скриншот - выводит дебильное окно ?)

В скриншотере должны быть минимальные фичи: скриншот всего, скриншот области, скриншот окна. Опционально скриншот по таймауту. Совсем опционально автоматический хостинг в какой-либо популярный.

Посмотри исходники scrot. Там все нормально кроме дебилизма с ключами -s -d =)

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

В ядре нет кутэ, окстись. Мы тут не в бирюльки играем, а серьезную заявку на успех делаем. От скриншотера в ядре Линус в осадок выпадет, да и другие оценят. А очередная юзерспейсная поделка никому не интересна.

cocucka_B_TECTE
()
Ответ на: комментарий от TheNewDragon

Торвальдс целое ядро написал будучи студентом, а ты перед простым модулем уже пасуешь.

Прикинь, на экзамене препод хочет тебе четвертак поставить, а ты такой херак кулаком по столу: «ты чё, пес, я контрибьютер в ядро» и вот он уже пишет «отл» в зачетку.

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

Мы тут не в бирюльки играем, а серьезную заявку на успех делаем.

А дальше серьёзной заявки дело-то пойдёт?

Скрьезна чтоле

Не вполне понял интонацию: это типа неверие своему щастью, или что? LOL

Да, скрьезна: взял кусок из своего старого проектика, которым перестал пользоваться аккурат вчера, прочитав первый камент к упомянутой тобой новости.

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

или пишет ядрёный термоядерный скриншотер

Fixed.

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

Там куча проблем граблей с wayland.

Это решается просто - объявляешь его deprecated и не поддерживаешь.

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

Поддержку non-kms иксов тоже надо организовать, так что всё сложнее.

Я пожалуй отвечу за него:

Это решается просто - объявляешь его deprecated и не поддерживаешь.

:)

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

Поддерживать то вроде поддерживают, но поддержку не-kms разве дропнули?

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

Деды, правда, завещали посылать это дело сразу на печать

Деды, правда, завещали это дело карандашиком записывать.

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

От скриншотера в ядре Линус в осадок выпадет

Это рядли.

да и другие оценят.

А вот это точно! Видосик как Линус юхами кроет «изобретателей» очень многим зайдет. :)

anc ★★★★★
()

Сделай аналог scrot, снимок всего экрана, конкретного рабочего стола, окна или области в позиции x, y размером w, h и возможно как предложили ещё с возможностью как у fbgrab делать снимок ядерной консоли. И никакие QT, GTK, boost тебе при этом будут не нужны, лишь API X11,Wayland и библиотеки для работы с png последнее желательно вообще подбирать для статической сборки. И будет всеми любимая скриншотилка, работающая везде на любом DE/WM или даже на сервере без видеоадаптеров и графики в принципе.

Начать легко, главное не бросай. А начать стоит с обратного, работы с png, работой с аргументами командной строки, а уже потом прикручивать к этому вариации работы под тем или иным, ведь всё что тебе надо получить источник пикселей которые вероятно ещё надо будет преобразовать, так как форматы представления данных изображения разные, и потом записать уже в png опять же параметры сжатия и всё такое, это тоже стоит продумать ещё до того как начнёшь рыть в сторону иксов и вялого и может быть даже ядра.

Кажется простым просто сохранить png, но на деле проблем будет больше чем сделать скрин всего экрана на иксах, там буквально 20 строчек на C например нужно, с проверками и прочим. С окнами разве что будет надо разбираться, но опять же посильно.

Удачи. Главное хотеть. И правильно воспринимать критику, даже если тебя наругают порой есть что на ус намотать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от dimgel

или что? LOL

А мне что останется делать? Это кутя настолько мощная что решается одной функцик. Капец просто. Как ее на курсовик растянуть? Это круто но ты меня растроил... :D

TheNewDragon
() автор топика
Ответ на: комментарий от cocucka_B_TECTE

возраст у него подходящий.

У моего бати лапа заросшая. Сказал мне что я никуда не пойду. Может даже в армию вобще. Болячку уже придумали. Атеросклярос мозга. Типо давление 160 и т.д.

TheNewDragon
() автор топика
Ответ на: комментарий от TheNewDragon

Как ее на курсовик растянуть?

Вы таки не правильный студень. Разбиваете на двадцать функций и сотню переменных a1,a2,a3,a4...a100, потом долго и нудно объясняете преподу почему вы сделали именно так. Профит Зачет.

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

Болячку уже придумали.

В армии «раздумают» вашу болячку.

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

А тебе останется делать нормальный удобный гуй. Разница в трудозатратах между наколенной поделкой и удобной программой – порядок-два. Так что заняться будет чем.

Я показал всего лишь один вызов – собственно снятие снимка экрана. Без высокоуровневой либы, пришлось бы тебе пердолиться с прямыми вызовами xorg/wayland. Это очень так себе удовольствие, и ещё хз не сломают ли твои вызовы протокол взаимодействия фреймворка, на котором будешь писать гуй. (Хотя, если одному приложению можно устанавливать несколько соединений с xorg/wayland, т.е. в случае xorg – несколько контекстов xlib/xcb, то создаёшь свой контекст с нуля – и вперёд.)

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

и библиотеки для работы с png последнее желательно вообще подбирать для статической сборки

Лучше выхлоп raw в stdout, чтоб пользователь мог сам дальше решить, что ему нужно. Кто-то может захичет сохранить на диск, а кто-то сразу загрузить в редактор. Гибкость одним словом.

u5er
()

...примут пакетом.

Ага. Догонят и ещё раз... ...примут.

ЗЫ Не напишешь же.

sparkie ★★★★
()

чтобы не было зависимости от оконного менеджера

scrot

amd_amd ★★★★★
()

напишите лучше мега-функцию в Android которая улучшает фотки мониторов.

Когда говоришь «а пришлите хотя-бы скриншот, чего там у вас», почти в половине случаев присылают фотку телефоном.

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

напишите лучше мега-функцию в Android которая улучшает фотки мониторов.

Зачем «улучшает»?

  1. Камера должна распознать, что она наведена на монитор
  2. Андроид синкается с ПК
  3. ПК присылает скриншот
  4. Камера вставляет скриншот на фото подогнав под размеры и добавив перспективы

типа как самсунги Луну снимают только лучше

FishHook
()
Ответ на: комментарий от cocucka_B_TECTE

Если хочешь всех удивить, то пиши скриншотер, который будет работать в пространстве ядра и по нажатию клавиши PrintScreen сбрасывать видеобуфер на диск в формате PNG

Ну так а там же асм будет нужен а я его не знаю. На чистом си и сиси+ тоже не смогу. По крайней мере я засру форум вопросами, вы этого хотите.

TheNewDragon
() автор топика
Ответ на: комментарий от TheNewDragon

На ассемблере в ядре кода по-минимуму. Даже взаимодействие с железом почти всё на сишке.

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

Можешь на расте запилить, будет еще круче. Заодно прокачаешься.

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

cocucka_B_TECTE
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)