Текущий архив: 2011.07.03;
Скачать: CL | DM;
ВнизВписать картинку в рамку с закругленными краями Найти похожие ветки
← →
DenKa (2011-03-25 22:13) [0]Собственно делаю примерно так:
...
// подгоняю картинку в размер региона, в который она будет вписана
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-25 23:11) [1]Причину этого вроде понял: Canvas.Brush.Bitmap привязывает к канве заданную картинку, начиная с позиции 0,0. А поскольку размер канвы больше размера картинки, то картинка начинает дублироваться до полного заполнения канвы. Затем уже PaintRgn "вырезает" регион с заданными координатами и "попадает" на место пересечения нескольких картинок, отрисованных на канве.
Получается нужно начать "рисовать" на канве картинку с заданной позиции, но Canvas.MoveTo отчего-то тут не срабатывает..
← →
Игорь Шевченко © (2011-03-25 23:40) [2]
> Вписать картинку в рамку с закругленными краями [D7
SetClipRgn
← →
Игорь Шевченко © (2011-03-25 23:41) [3]Тьфу, SelectClipRgn
← →
DenKa (2011-03-26 09:11) [4]Вау, спасибо!
Сталобыть будет так:
Rgn := CreateRoundRectRgn(114, 158, 114+272, 158+382, 20, 20);
SelectClipRgn(Canvas.Handle, Rgn);
Canvas.Draw(114, 158, bmp);
Страницы: 1 вся ветка
Текущий архив: 2011.07.03;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.003 c