![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вписать рисунок в RoundRect [D7, XP]
Alex_C © (2012-03-05 12:12:00)На канвасе нужно нарисовать RiundRect и вписать в него рисунок.
Делаю так:
procedure DrawRoundRect2Canvas(FromFastDIB: TFastDIB; ToCanvas: TCanvas;
Left, Top, Width, Height, R1, R2: integer; Alpha: Byte);
var
DestDIB, TmpBmp, BkgPic: TFastDIB;
y, x: integer;
Src, Dest: PLine24;
begin
if (Width < 5) or (Height < 5) then
Exit;
DestDIB := TFastDIB.Create;
// Устанавливаем конечный размер изображения
DestDIB.SetSize(Width, Height, FromFastDIB.Bpp);
// Копиреум изображение из исходного источника
SmoothResize(FromFastDIB, DestDIB, rfCatrom, nil, True);
// Вспомогательный FastDIB с нарисованным RoundRect
TmpBmp := FDIB_Create(Width, Height, FromFastDIB.Bpp);
TmpBmp.SetBrush(BS_SOLID, HS_HORIZONTAL, clWhite);
Windows.RoundRect(TmpBmp.hDC, 0, 0, Width, Height, R1, R2);
for y := 0 to TmpBmp.Height - 1 do
begin
Src := TmpBmp.ScanLines[y];
Dest := DestDIB.ScanLines[y];
for x := 0 to TmpBmp.Width - 1 do
begin
//если точка (x, y) на созданном Bitmap белая,
//то точку (x, y) на исходном Bitmap закрашиваем BackColor
if Src[x].r = 255 then
begin
// А вот здесь нужно рисовать на исходном канвасе ???
end;
end;
end;
DestDIB.Free;
TmpBmp.Free;
end;
Никак не соображу, как перейти к координатам канваса, на котором нужно рисовать?
Омлет (2012-03-05 22:02:00) [1]Как-то так: http://delphi-e.narod.ru/bmp_ellipse_cut.html
Андреевич (2012-03-05 15:14:00) [2]
dest[x]:=src[x];
вроде бы