Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нет курсора


WeeK ©   (2006-09-07 09:27:00) 

Снимаю скриншот с экрана и сохраняю в файл, делаю так:

var
 bmp: TBitmap;
 DC: HDC;
begin
 bmp:=TBitmap.Create;
 bmp.Height:=Screen.Height;
 bmp.Width:=Screen.Width;
 DC:=GetDC(0);  //Дескpиптоp экpана
 bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
 Canvas.Draw(0,0,bmp);
 bmp.SaveToFile('Screen.bmp');
 ReleaseDC(0, DC);
end;


Но курсора не видно, на скриншоте, а надо бы, не подскажете?


Barloggg   (2006-09-07 13:05:00) [1]

а я ручками уменьшал :) правда на входе имел 8битный палитровый битмап и ужимал его с допуском (читай потерями) в, скажем, 10-15% и выигрывал при этом порядка 30% палитры. а там перегонка в PNG и кое-какая экономия места на диске...

кстати пришлось мне сравнить скорость изменения формата ииз 24bit в 8bit. Photoshop управился за пару секунд. Gimp (фрееварный клон) потел минут 7-10.
как странно. казалось-бы всего-то делов: посчитать сколько каких цветов использовано, потом вычленить главные цвета (тех кого больше и тех кто сильно отличается от остальных), потом ужать остальные до суммарного кол-ва не более 256, потом сделать таблицу замен с какого цвета на какой и потом сформировать результат.
кстати я предпочитаю сделать сначала файл а потом его загрузить из потока как картинку чем пользоваться canvas'ом. наверное это комплекс вынесенный из изучения D3D...


Джо   (2006-09-07 10:32:00) [2]

2WeeK: Тебя чем код в [3] не устроил?


> [8] WeeK   (07.09.06 10:18)
> Да ещё вопрос по ходу появился, как можно уменьшить при
> сохранении количества цветов, Чтоб картинка меньше весила

Bitmap.PixelFormat, но не лучше ли записывать в Jpeg?


WeeK   (2006-09-07 10:18:00) [3]

Да ещё вопрос по ходу появился, как можно уменьшить при сохранении количества цветов, Чтоб картинка меньше весила


Barloggg   (2006-09-07 10:17:00) [4]

клинический случай как справится с такой задачей я встретил в обучающем компакт-диске. там все примеры были сняты видеокамерой. там и курсор есть и голос. :))))

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


Barloggg   (2006-09-07 10:11:00) [5]

курсор рисуется оверлеем. аппаратно. и на экране его как-бы нет. ибо оверлей это внеэкранная поверхность.

а если отключить в винде все графические ускорения в свойствах экрана, то курсор на скриншотах появится.

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


SerJaNT   (2006-09-07 09:39:00) [6]

> Даже Radmin


А что RAdmin у нас супер прога чтобы сравниваться с ней? Если в нем что-то отсутствует это не значит что это не возможно сделать.


Джо   (2006-09-07 09:32:00) [7]

procedure MakeScreenshot (Bmp: TBitmap; CaptureCursor: Boolean = True);
var
 DC: HDC;
 ACursor: HICON;
 Pt: TPoint;
 CurInfo: tagCURSORINFO;
 IcoInfo: _ICONINFO;
begin
 Bmp.Width := Screen.Width;
 Bmp.Height := Screen.Height;

 DC := GetDC (GetDesktopWindow);
 try
   BitBlt (
     Bmp.Canvas.Handle,
     0,0,Bmp.Width,Bmp.Height,
     DC,
     0,0,
     SRCCOPY);

   // -- курсор
   if CaptureCursor then
   begin

     CurInfo.cbSize := SizeOf(CurInfo);
     GetCursorInfo(CurInfo);

     ACursor := CurInfo.hCursor;
     Pt := CurInfo.ptScreenPos;

     GetIconInfo (ACursor,IcoInfo);

     DrawIcon(
       Bmp.Canvas.Handle,
       Pt.X-IcoInfo.xHotspot,
       Pt.Y-IcoInfo.yHotspot,
       ACursor
     )
   end;

 finally
   ReleaseDC (GetDesktopWindow,DC);
 end;
end;


SerJaNT   (2006-09-07 09:32:00) [8]

> Даже Radmin не рисует курсор мышы на скриншотах экрана.
> ИМХО забудь


RAdmin 3.0 курсор рисует.


RoNaBoU   (2006-09-07 09:31:00) [9]

Но можно наверное программно вставить, определить хде курсор, и сверху на него нарисовать!


Elen   (2006-09-07 09:29:00) [10]


> WeeK

Даже Radmin не рисует курсор мышы на скриншотах экрана. ИМХО забудь


Наверх

Титульная страница Поиск, карта сайта Написать письмо