Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Круглый стол
  
Правила КС
>> Настройки

Фильтр вопросов
>> Новые вопросы
отслеживать по
>> Новые ответы

Избранное

Страница вопросов
Поиск по КС


Специальные проекты:
>> К л ю к в а
>> Г о л о в о л о м к и

Вопрос №

Задать вопрос
Off-topic вопросы

Помощь

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  00:16[Войти] | [Зарегистрироваться]
Ответ на вопрос № 15397

11-02-2003 14:39
Здраствуйте !

Я пишу программу типа RAdmin. Она снимает скриншоты с десктопа и отправляет их в
сеть через сокет.
Я напоролся на проблему быстродействия API-функций GDI при получении снимков экрана.
Делаю я это так:

const BuffSize=1000;
var ScreenDC, MemDC:HDC;
    Bitmap: HBITMAP;
    buff: array[0..BuffSize-1] of byte; //буффер для хранения битмапа
begin
  ScreenDC := GetDC(0);
  MemDC := CreateCompatibleDC(ScreenDC);
  Bitmap:=CreateCompatibleBitmap(ScreenDC, 1024, 768);
  SelectObject(memDC,Bitmap);

  BitBlt(MemDC,0,0,1024,768,ScreenDC,0,0,SRCCOPY);
  GetBitmapBits(Bitmap, BuffSize, @buff); //Копируем битмап в буффер
  // Некоторые действия пикселями в буффере, например шифрование и
пересылка буффера в сеть
  // ......
  ReleaseDC(0, ScreenDC);
end;

Оно то работает, но так тормозит, что даже мышь завмирает в Windows'e в
момент выполнения этого кода.
Тормоза вызваны главным образом функцией GetBitmapBits. Я ее вызываю
чтобы получить пиксели (битмап) и отправить их в сеть через сокет.
Пробовал я и другие АПИ функции GDI. Всегда при копировании изображения из экрана в
память возникает
завмирание мыши на пол секунды.
-------------------------
Если Вам не трудно, помогите советом (а то мне уже MSDN по ночам сниться
в виде кошмара):
Как мне обойти эту проблему с торможением и как можно получить
непосредственный доступ к пикселям десктопа без всяких там копирований ?

Может я вобще не в том направлении копать начал ?

[+] Добавить в избранные вопросы

Отслеживать ответы на этот вопрос по RSS

Ответы:


Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице.
Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.

21-11-2004 09:40
Смотря для чего делается програма.
1. Если нужно показать на удаленном екране изображение не в реальном времени, то поищи анфу о записи екрана в AVI, а потом не мпеша отправь файл по сети.
2. Я не пробовал, но может будет быстрее, если передавать данные через несколько портов. Сдесь дело только в сети. С пощощью BitBlt экран копируется меньше милисекунды.

13-05-2003 17:08
Слушай! Как я понял R Admin копирует не весь экран, а тока ту часть которая в данный момент перерисовывается! В Api есть функции GetUpdateRect & GetUpdateRgn но вот как они работают непонятно! Если кто знает поделитесь!

PS: А вообще битмап это туева хуча ненужной инфы кодируй его в jpeg места меньше займет и по сетка пересылаться будет быстро. ;-)

14-02-2003 00:24
передача изображения по-любому будет тормозить, тем более реального режима все равно не получится. тот же Remote Administrator, скорее всего передает не изображение экрана, а перехваченные им команды GDI Windows, за счет чего и имеет высокую скорость работы.
 

13-02-2003 14:18
Попробуй в основе всего этого использовать

SourceCanvas.Handle := ScreenDC;
ScreenBitMap := TBitMap.Create;
ScreenBitMap.Canvas.CopyRect(SourceRect: TRect; SourceCanvas: TCanvas; DestRect: TRect);

Должно быть быстрее.
А для передачи в Socket используй ScreenBitMap.SaveToStream

12-02-2003 17:27
А не проще ли использовать PrintScreen через PostMessage?
Получится сразу в буфер.

11-02-2003 18:03
Если идти по тому пути, который ты выбрал, то
я бы посоветовал:
1. Переменные MemDC,Bitmap и buff должны быть созданы и
инициализированы один раз. Ни в коем случае, нельзя это делать
в цикле.
2. ReleaseDC должен быть вызван как можно раньше (после BitBlt)

11-02-2003 16:06
А если выполнять это в отдельном потоке?
 777

Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Жили у бабуси два веселых гуся. Один белый, другой КАКОЙ?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.
Тип сообщения:
Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве

    Страница избранных вопросов Круглого стола.
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования