Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> узнать цвет пикселя, или как работать с объектом Screen 
V
    Опции темы
Alexey_2007
Дата 12.1.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: нет
Всего: 1



Нужно грубо говоря самому программно сделать скриншот экрана.

Читал что это делается с использованием объекта Screen? но как - не могу понять... 


--------------------
Святая простота
PM MAIL   Вверх
Pulse69
Дата 13.1.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 28.4.2006
Где: Хабаровск

Репутация: 8
Всего: 10



Если речь зашла об объектах, то тебе не в раздел WinAPI.
В WinAPI скриншот делается так.
Код

// Получаем контекст всего экрана
HDC hScreenDC = GetDC( NULL );

// Здесь с контекстом экрана можно делать все операции GDI, например GetPixel, LineTo, и т д.

// Освобождаем контекст
ReleaseDC( hScreenDC );

--------------------
Ctrl+Alt+Reset 
PM MAIL   Вверх
Alexeis
Дата 13.1.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 7
Всего: 459



Pulse69, ну я думаю, что если это скриншот, то еще бы хорошо его на битмап скопировать, а с битмапом уже можно делать все что угодно.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexey_2007
Дата 13.1.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: нет
Всего: 1



Если не сложно привидите пример как содержимое экрана на битмап копировать...

И как при этом узнать размеры экрана?

Это сообщение отредактировал(а) Alexey_2007 - 13.1.2007, 15:31
--------------------
Святая простота
PM MAIL   Вверх
Pulse69
Дата 13.1.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 28.4.2006
Где: Хабаровск

Репутация: 8
Всего: 10



Копируй сколько угодно.
(извини за Fast And Dirty)

Код


bool TakeScreenshot( OUT HDC &hCompatibleDC, OUT HBITMAP &hBitmap)
{
    HDC hScreenDC=NULL;        //    Контекст экрана
    DWORD xRes, yRes;        //    Размеры экрана

    try
    {
        hCompatibleDC = NULL;
        hBitmap = NULL;

        //    Открываем контекст экрана
        hScreenDC = GetDC( NULL );

        if(!hScreenDC ) throw 1;

        //    Получаем размеры экрана
        xRes = GetDeviceCaps(hScreenDC, HORZRES);
        yRes = GetDeviceCaps(hScreenDC, VERTRES);

       

        //    создаём совместимый контекст
        hCompatibleDC = CreateCompatibleDC( hScreenDC );

        if(!hCompatibleDC ) throw 2;

        //    Создаём совместимый битмап
        hBitmap = CreateCompatibleBitmap( hScreenDC, xRes, yRes );

                  if(!hBitmap ) throw 3;

        //    Выбираем объект
        if(!SelectObject( hCompatibleDC, hBitmap ) ) throw 4;


        //    Копируем изображение с экрана
        if(!BitBlt( hCompatibleDC, 0,0, xRes, yRes, hScreenDC, 0,0, SRCCOPY )) throw 5;

        //    Всё сделано.
         ReleaseDC( NULL, hScreenDC );

        return true;

    }
    catch( DWORD exc )
    {
        if( hScreenDC) ReleaseDC( NULL, hScreenDC );
        if( hBitmap ) DeleteObject( hBitmap );
        if (hCompatibleDC ) DeleteDC( hCompatibleDC );

        return false;
    }
    
    return false;
}



Это сообщение отредактировал(а) Pulse69 - 13.1.2007, 14:50
--------------------
Ctrl+Alt+Reset 
PM MAIL   Вверх
Alexey_2007
Дата 13.1.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 30.12.2006

Репутация: нет
Всего: 1



спасибо)))

правда первый раз слышу про try и throw, но в целом всё понятно
--------------------
Святая простота
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0908 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.