Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2013, 17:13   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию Скриншот в Линуксе. программно.

Всем добрый день. Захотелось мне лепить скриншоты экрана под Линуксом, и отправлять их по сети куда-то.
Вопрос: Есть ли в Линуксе функция-аналог BitBLT виндоуса? Какие библиотеки при этом нужно использовать, и есть ли зависимость от версий линукса? Ссылка на чтиво приветствуется. Идеи и намеки по которым можно начать искать в поисковиках приветствуются. ЯВУ не имеет значения (пока что по крайней мере...).
Сам принцип хотелось бы понять для начала.

Если что планирую разработку в Лазарусе...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2013, 20:07   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

http://unixa.ru/linux/scrot-delaem-skrinshotyi.html
http://freepascal.ru/forum/viewtopic.php?f=5&t=3784
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 30.01.2013 в 20:24.
Utkin вне форума Ответить с цитированием
Старый 30.01.2013, 20:36   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да нет... Я хочу сам сделать что-то наподобие этой программы. По своему. Допустим мне нужно только в определенном месте экрана фоткать, потом преобразовывать фотку по особому и отправлять. Стороннее не подходит. Есть у линукса API с функциями работы с графикой операционки?

P.S. Второе попробую, спасибо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2013, 21:00   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Цитата:
Есть у линукса API с функциями работы с графикой операционки?
У операционки нет графики, это ввинде она вшита в ядро. На сегодня линуксы используют в основном Иксы - http://ru.wikipedia.org/wiki/X_Window_System
Всякие там КДЕ и Гномы это оболочки поверх иксов. Поэтому Вам нужно научиться общаться с иксами.
Конкретно по лазарусу - http://sources.ru/pascal/graph/xwinfpc/index.htm
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.01.2013, 21:36   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ух ты!!!. Вот за чтиво великий Данке. Уже есть за что схватится. Для начала вполне подойдет, отталкиваться буду от этого.

P.S. Лазарус рулит. Тот способ подходит и для Линукса и для винды (в Винде разве что хендл десктопа возможно понадобится)
I'm learning to live...

Последний раз редактировалось Stilet; 30.01.2013 в 21:42.
Stilet вне форума Ответить с цитированием
Старый 31.01.2013, 05:34   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 18,136
По умолчанию

Однако, изучать нужно быстро, возможно у иксов появится достойный конкурент - http://ru.wikipedia.org/wiki/Wayland
И если убунту сильно привязана к дебиан (а он консервативен), то федора вполне может перейти на новую систему. А глядя на нее и все остальные .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 31.01.2013, 14:32   #7
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,603
По умолчанию

Цитата:
И если убунту сильно привязана к дебиан
А в sid'е есть WayLand? Я бы глянул исходники.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 01.02.2013, 01:52   #8
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
Восклицание

Может опоздал, но лишним не будет. Там в принципе не особо сложно.
Код:
static
QPixmap grabWindow( Window child, int x, int y, uint w, uint h, uint border,
		    QString *title=0, QString *windowClass=0 )
{
    QPixmap pm( QPixmap::grabWindow( QX11Info::appRootWindow(), x, y, w, h ) );

    KWindowInfo winInfo( findRealWindow(child), NET::WMVisibleName, NET::WM2WindowClass );
    if ( title )
	(*title) = winInfo.visibleName();
    if ( windowClass )
	(*windowClass) = winInfo.windowClassName();

#ifdef HAVE_X11_EXTENSIONS_SHAPE_H
    int tmp1, tmp2;
    //Check whether the extension is available
    if ( XShapeQueryExtension( QX11Info::display(), &tmp1, &tmp2 ) ) {
	QBitmap mask( w, h );
	//As the first step, get the mask from XShape.
	int count, order;
	XRectangle* rects = XShapeGetRectangles( QX11Info::display(), child,
						 ShapeBounding, &count, &order );
	//The ShapeBounding region is the outermost shape of the window;
	//ShapeBounding - ShapeClipping is defined to be the border.
	//Since the border area is part of the window, we use bounding
	// to limit our work region
	if (rects) {
	    //Create a QRegion from the rectangles describing the bounding mask.
	    QRegion contents;
	    for ( int pos = 0; pos < count; pos++ )
		contents += QRegion( rects[pos].x, rects[pos].y,
				     rects[pos].width, rects[pos].height );
	    XFree( rects );

	    //Create the bounding box.
	    QRegion bbox( 0, 0, w, h );

	    if( border > 0 ) {
		contents.translate( border, border );
		contents += QRegion( 0, 0, border, h );
		contents += QRegion( 0, 0, w, border );
		contents += QRegion( 0, h - border, w, border );
		contents += QRegion( w - border, 0, border, h );
	    }

	    //Get the masked away area.
	    QRegion maskedAway = bbox - contents;
	    QVector<QRect> maskedAwayRects = maskedAway.rects();

	    //Construct a bitmap mask from the rectangles
	    QPainter p(&mask);
	    p.fillRect(0, 0, w, h, Qt::color1);
	    for (int pos = 0; pos < maskedAwayRects.count(); pos++)
		    p.fillRect(maskedAwayRects[pos], Qt::color0);
	    p.end();

	    pm.setMask(mask);
	}
    }
#endif

    return pm;
}
Это KSnapshot из KDEGraphics
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с репами в линуксе yaapelsinko Операционные системы общие вопросы 1 04.08.2012 04:04
Вывод в консоль в линуксе arcer Общие вопросы C/C++ 2 18.11.2010 20:47
Подождать n-секунд в линуксе. Не в билдере =) TwiX Общие вопросы C/C++ 6 23.10.2009 17:22
Помогите с командной сторокой в Линуксе manax Помощь студентам 1 08.11.2008 12:26