Получить изображение с TCustomControl

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Получить изображение с TCustomControl

Сообщение VirtUX » 14.04.2019 10:06:44

Как получить изображение с TCustomControl в TBitmap?
Вот есть, например, TButton. Он определенного цвета, на нем что-то написано и т.д.. Как получить скан-изображение с него, и поместить это изображение в TBitmap?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Получить изображение с TCustomControl

Сообщение Sergei I. Gorelkin » 14.04.2019 10:34:14

Метод TWinControl.PaintTo позволяет нарисовать его на любом TCanvas.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1395
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Получить изображение с TCustomControl

Сообщение VirtUX » 14.04.2019 11:12:39

Получаю External: SIGSEGV

Код: Выделить всё
if (cnt is TWinControl) then begin
         btm:= TBitmap.Create;
         btm.SetSize(cnt.ClientWidth, cnt.ClientHeight);
         TWinControl(cnt).PaintTo(btm.Canvas, 0, 0); //External: SIGSEGV
         btm.SaveToFile(ParamStr(0)+'.bmp');
         FreeAndNil(btm);
      end;                   

ЧТо не так?...

Добавлено спустя 28 минут 55 секунд:
Похоже PainTo можно использовать только после некоторого события. Я получаю ошибку, так как пытаюсь вызвать метод когда контрол еще не отрисован на своём паренте. При этом свойство Visible = true уже. Как можно определить, что PaintTo уже можно вызывать безболезненно?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Получить изображение с TCustomControl

Сообщение iskander » 14.04.2019 13:23:49

А если
Код: Выделить всё
if (cnt is TWinControl) then begin
         btm:= TBitmap.Create;
         btm.SetSize(cnt.Width, cnt.Height);
         TWinControl(cnt).PaintTo(btm.Canvas, 0, 0);
         btm.SaveToFile(ParamStr(0)+'.bmp');
         FreeAndNil(btm);
      end; 
?
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34

Re: Получить изображение с TCustomControl

Сообщение VirtUX » 14.04.2019 21:32:23

тоже самое. И я уже понимаю, что проблема в самом TBitmap. Так как на канву формы рисует без ошибок. Но в чем проблема? Может сам TBitmap.Canvas надо как-то подготовить?...

Добавлено спустя 13 часов 56 минут 38 секунд:
TBitmap.Canvas является ReadOnly в этом и проблема.
Тогда вопрос: как копировать изображение TCustomControl в TBitmap?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Получить изображение с TCustomControl

Сообщение Лекс Айрин » 15.04.2019 12:25:30

VirtUX, попробуй воспользоваться функциями самого канваса, типа Draw
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Получить изображение с TCustomControl

Сообщение iskander » 15.04.2019 14:04:35

VirtUX, нужен минимальный пример в котором эта ошибка воспроизводится.
У меня вышеупомянутая процедура работает без вопросов.
iskander
энтузиаст
 
Сообщения: 590
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru