Копирование экрана
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Как программно, не исспользуя буфер обмена скопировать экран или его часть в TImage? В копируемой части экрана может быть чужое окно или его часть.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Мне бы без потоков и для Borland Visual c++ 6.0 Enterprize.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
atavin-ta, а где ты там потоки увидел?
Код: Выделить всё
cout << "gflImportFromHWND error: "...
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Блин, там примерто махонький. Разве не понятно, что вывод на cout - это лишь демо. И на работу с изображением никак не влияет.atavin-ta писал(а): это вывод в поток.
Скачай с сайта билиотеку, распакуй, там примеры есть и все описания/декларации.И запихать картинку надо именно в обект класса TImage (болэндовский класс, объединяющий битмап и окно для его отображения) а не во что-то другое.
Там и Help-файл есть с описанием (хотя довольно лаконичным) функций/структур.
По примеру.
Функция gflImportFromHWND читает экран (или часть жкрана, если задать параметр rect) в некую свою структуру, возвращается указатель на нее (pBitmap).
C TImage, к сожалению, не работал.
В библиотеке есть функции:
gflConvertBitmapIntoDIB
gflConvertBitmapIntoDIBSection
gflConvertBitmapIntoDDB
gflConvertBitmapIntoDDBEx
Возможно, одна из них преобразует картинку из "формата" этой библиотеки в тот формат, который ты сможешь уже "скормить" твоему TImage.
Там же (в дистрибутиве) есть пример для Delphi (если тебе нужно именно для Borland C, то, я так понимаю, этот пример может разъяснить, как и что), расположен в:
\GflSDK\Delphi\Demo\Source\
Во всяком случае, переменные типа TImage я там увидел.
"скормить" TImageу можно только то, что принимает метод Draw(int X, int Y, TGraphic* Graphic);, или цвета отдельных точек, или цвета и координаты примитивов, или всё, что принимают функции GID с контекстом, созданным на основе Image1->Picture->Bitmap->Handle. Ничего другого TImage не примет. Причём, цвета ему нельязя "скормить" единым массивом, а только в цикле. И надо не для Delphi, а для Borland visyual c++ enterprize 6.0. gflImportFromHWND упомятнут в текстовой константе. А где код самой функции? Я не нашел даже декларации её прототипа.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Не понимаю, что значит "упомятнут в текстовой константе".atavin-ta писал(а):gflImportFromHWND упомятнут в текстовой константе. а где код самой функции? Я не нашел даже декларации её прототипа.
"Код самой функции" - "внутри" DLL. Т.е. исходый текст тебе недоступен.
Прототип - в файле libgfle.h (лекго находится контекстным поиском).
Возможно, тебе подойдет какая-то из ф-ий (верное, вторая):
extern GFLEXTERN GFL_ERROR GFLAPI gflConvertBitmapIntoDIBSection( const GFL_BITMAP *bitmap, HBITMAP *hDIB );
extern GFLEXTERN GFL_ERROR GFLAPI gflConvertBitmapIntoDDB ( const GFL_BITMAP *bitmap, HBITMAP *hBitmap );
Они на выходе дают HBITMAP, а поле TBitmap.Handle, как я понимаю, именно этого типа.
Ну и где я возьму эту dll?BBB писал(а):Не понимаю, что значит "упомятнут в текстовой константе".
"Код самой функции" - "внутри" DLL. Т.е. исходый текст тебе недоступен.
Прототип - в файле libgfle.h (лекго находится контекстным поиском).
Возможно, тебе подойдет какая-то из ф-ий (верное, вторая):
extern GFLEXTERN GFL_ERROR GFLAPI gflConvertBitmapIntoDIBSection( const GFL_BITMAP *bitmap, HBITMAP *hDIB );
extern GFLEXTERN GFL_ERROR GFLAPI gflConvertBitmapIntoDDB ( const GFL_BITMAP *bitmap, HBITMAP *hBitmap );
Они на выходе дают HBITMAP, а поле TBitmap.Handle, как я понимаю, именно этого типа.
Формальный тип поля TBitmap.Handle void*, действительный по-моему HWND *.
"Упомянут в текстовой константе" означает существование текстовой константы (в данном случае явной), значение которой есть текст с указанием на даанную функцию.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Скачай отсюда (библиотека бесплатная):atavin-ta писал(а):Ну и где я возьму эту dll?
http://www.xnview.com/en/download_gfl.html
Вот прямая ссылка с указанной выше странички на дистрибутив (там и DLL, и header-ы, и приимеры, и Help):
http://download.xnview.com/GflSDK-win.zip
Borland C у меня под рукой нет, а в Delphi в классе TBitmap Handle описан как:atavin-ta писал(а):Формальный тип поля TBitmap.Handle void*, действительный по-моему HWND *.
property Handle: HBitmap;
Help также пишет:
Provides access to the Windows GDI bitmap handle for accessing the GDI bitmap object.
property Handle: HBitmap;
Description
Use Handle to call a Windows API function that requires the handle of a bitmap object. Pass Handle as the bitmap handle parameter to these functions.
Handle is the HBITMAP encapsulated by the bitmap object. Avoid grabbing the handle directly since it causes the HBITMAP to be copied if more than one TBitmap shares the handle.
Note: Be careful who you give the handle to. If the receiver will take ownership (and destroy) the bitmap handle, call TBitmap.ReleaseHandle.