![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вписать картинку в рамку с закругленными краями [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 отчего-то тут не срабатывает..