Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.03.2012, 20:48
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
Вопрос Скопировать часть изображения в canvas

Допустим, на форме есть растянутый Image1, в него грузится картинка. Сверху Image1 лежит Image2 (размером меньше) и в его канву нужно загрузить тот кусок рисунка из Image1 который как бы закрывает Image2.
Другими словами, чтобы Image2 фотографировала в канву то, что находится под ней
Подскажите пожалуйста как можно реализовать!
Ответить с цитированием
  #2  
Старый 19.03.2012, 21:00
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Читай про BitBlt.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 19.03.2012, 21:09
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bargest
Читай про BitBlt.
а можно пример ее использования пытался через copyrect но не сработало
Ответить с цитированием
  #4  
Старый 19.03.2012, 21:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

На самом деле, лучше использовать StretchBlt или TransparentBlt. Лучше по той причине, по которой и CopyRect не помог:
Цитата:
...на форме есть растянутый Image1...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 19.03.2012, 21:23
nbstudio nbstudio вне форума
Прохожий
 
Регистрация: 01.09.2008
Сообщения: 38
Репутация: 10
По умолчанию

нашел решение
Цитата:
BitBlt(dest.Canvas.Handle, 0, 0, dest.Width,
dest.Height, src.Canvas.Handle,
dest.Left, dest.Top, SRCCOPY);

Последний раз редактировалось nbstudio, 19.03.2012 в 22:24.
Ответить с цитированием
  #6  
Старый 19.03.2012, 22:49
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

На форме лежит Image1 на нём Image2. В Image1 картинка уже загружена:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  aRect : TRect;
  bmp : TBitmap;
begin
  bmp := TBitmap.Create;
  try
    SetRect(aRect, Image2.Left - Image1.Left, Image2.Top - Image1.Top, Image2.Left + Image2.Width - Image1.Left, Image2.Top + Image2.Height - Image1.Top);
    bmp.Width  := Image1.Width;
    bmp.Height := Image1.Height;
    bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, Image1.Picture.Graphic);
    Image2.Canvas.CopyRect(Image2.Canvas.ClipRect, bmp.Canvas, aRect);
  finally
    bmp.Free;
  end;
end;

Цитата:
нашел решение

Цитата:
BitBlt(dest.Canvas.Handle, 0, 0, dest.Width,
dest.Height, src.Canvas.Handle,
dest.Left, dest.Top, SRCCOPY);
Это несколько не то. С изображениями отличными от битмап (jpg к примеру) работать не будет.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 19.03.2012 в 22:53.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025