Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.004 c
2-1301060792
Fr
2011-03-25 16:46
2011.07.03
Текст на TImage


15-1300391272
vajo
2011-03-17 22:47
2011.07.03
Проблема со звуком на компе.


2-1300957256
lewka
2011-03-24 12:00
2011.07.03
пауза при выполнении кода программы


2-1301057839
umbra
2011-03-25 15:57
2011.07.03
константные значения varType для своих вариантов


1-1258798953
Axtazi
2009-11-21 13:22
2011.07.03
Помогите




   Наверх