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

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

Вписать картинку в рамку с закругленными краями [D7]


DenKa ©   (2011-03-25 22:13:00) 

Собственно делаю примерно так:
...
// подгоняю картинку в размер региона, в который она будет вписана
jpg.Loadfromfile('pict.jpg');
bmp.Width := 272;
bmp.Height:= 382;
bmp.Canvas.StretchDraw( bmp.Canvas.Cliprect, jpg );

// рисую
Rgn := CreateRoundRectRgn(114, 158, 114+272, 158+382, 20, 20);
Canvas.Brush.Bitmap := bmp;
PaintRgn(Canvas.Handle, Rgn);

..и получаю картинку, состоящую из 4-х порезанных кусков переставленных местами. Примерно такую:
http://s003.radikal.ru/i202/1103/0d/52c59f108b37.jpg

Почему оно так и как исправить?


DenKa   (2011-03-26 09:11:00) [1]

Вау, спасибо!

Сталобыть будет так:

Rgn := CreateRoundRectRgn(114, 158, 114+272, 158+382, 20, 20);
SelectClipRgn(Canvas.Handle, Rgn);
Canvas.Draw(114, 158, bmp);


Игорь Шевченко   (2011-03-25 23:41:00) [2]

Тьфу, SelectClipRgn


Игорь Шевченко   (2011-03-25 23:40:00) [3]


> Вписать картинку в рамку с закругленными краями [D7


SetClipRgn


DenKa   (2011-03-25 23:11:00) [4]

Причину этого вроде понял: Canvas.Brush.Bitmap привязывает к канве заданную картинку, начиная с позиции 0,0. А поскольку размер канвы больше размера картинки, то картинка начинает дублироваться до полного заполнения канвы. Затем уже PaintRgn "вырезает" регион с заданными координатами и "попадает" на место пересечения нескольких картинок, отрисованных на канве.
Получается нужно начать "рисовать" на канве картинку с заданной позиции, но  Canvas.MoveTo отчего-то тут не срабатывает..


Наверх

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