Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
ВнизПолупрозрачность на Canvas Найти похожие ветки
← →
_dmitry (2002-12-05 15:40) [0]Необходимо рисовать многоугольники сквозь которые просвечивался бы рисунок.
Может быть есть реализация альфа каналов в стандартных свойствах канвы (или ее имитация)?
Помогите, плз.
← →
Calm (2002-12-05 16:43) [1]Есть компоненты для рисования, в которых есть немало всяких полезных штук, в том числе и полупрозраность. Называются FastDeep (или FastDip)
Но где взять не знаю :(
← →
_dmitry (2002-12-05 16:59) [2]FastDIB?
Мне очень не хотелось бы использовать сторонние компоненты, из за переноса версий, и совместимости. Это самый крайний способ, если не найду что нибудь лучше....
А может быть можно как-то через WinAPI?
← →
Axis_of_Evil (2002-12-05 18:42) [3]Авось BitBlt и BltTransparent на Canvas
вот только многоугольники:
var
Bitmap: TBitMap;
begin
Bitmap := TBitMap.Create;
Bitmap.Width, Height ....
Bitmap.Canvas.Polygon
BitBlt/BltTransparent(Bitmap...)
Если я не ошибся и у TBitMap есть Canvas
← →
ЮЮ (2002-12-06 04:13) [4]Есть ещё Grathics32, с иходными текстами
← →
_dmitry (2002-12-06 10:47) [5]2 Axis_of_Evil,
не совсем понял BltTransparent - это где такое есть?
2 ЮЮ,
а что это и где найти можно?
← →
Fenik (2002-12-07 18:38) [6]{ **** UBPFD *********** by delphibase.endimus.com ****
>> Установка уровня прозрачности изображения
Зависимости: Windows, Graphics, Math
Автор: Nikolas Chook, chook_nu@uraltc.ru, Новоуральск
Copyright: Автор Федоровских Николай
Дата: 3 сентября 2002 г.
***************************************************** }
procedure BlendBitmap(Src, Dest: TBitmap; Amount: Byte; Left, Top: Integer; BackColor: TColor; Transparent: Boolean);
function CandC(C1, C2: TRGBTriple): Boolean;
begin {Сравнение двух цветов}
Result := (C1.rgbtBlue = C2.rgbtBlue) and
(C1.rgbtGreen = C2.rgbtGreen) and
(C1.rgbtRed = C2.rgbtRed);
end;
{Процедура установления уровня прозрачности
изображения Dest, расположенного над изображением Src.
Amount - уровень прозрачности в промежутке [0..255].
Left, Top - левый верхний угол Dest.
BackColor - цвет, который не нужно изменять,
если Transparent = True.}
var x, y, y1, y2, x1, x2: Integer;
ps, pd: pRGBTriple;
rgb: TRGBTriple;
A1, A2: Double;
begin
Src.PixelFormat := pf24Bit;
Dest.PixelFormat := pf24Bit;
A1 := Amount/255;
A2 := 1 - A1;
{Изменяется только та часть изображения,
которая расположена над исходным}
y1 := Max(0, Top);
x1 := Max(0, Left);
x2 := Min(Src.Width - 1, Left + Dest.Width - 1);
y2 := Min(Src.Height - 1, Top + Dest.Height - 1);
rgb.rgbtRed := Lo(BackColor);
rgb.rgbtGreen := Lo(BackColor shr 8);
rgb.rgbtBlue := Lo((BackColor shr 8) shr 8);
for y := y1 to y2 do begin
ps := Src.ScanLine[y];
pd := Dest.ScanLine[y - Top];
Inc(ps, x1);
if Left < 0 then Inc(pd, Abs(Left));
for x := x1 to x2 do begin
if not (Transparent and CandC(pd^, rgb)) then
with pd^ do begin
rgbtBlue := Round(A1*ps^.rgbtBlue + A2*rgbtBlue);
rgbtGreen := Round(A1*ps^.rgbtGreen + A2*rgbtGreen);
rgbtRed := Round(A1*ps^.rgbtRed + A2*rgbtRed);
end;
Inc(pd);
Inc(ps);
end;
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c