Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Полупрозрачность на 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
3-61501
DmitryMN
2002-12-02 16:08
2002.12.19
ADOStoredProc


3-61451
Victor_Cr
2002-11-29 14:07
2002.12.19
Права юзерей, на уровне полей таблиц.


14-61803
France
2002-11-28 11:24
2002.12.19
Теща и свекровь


1-61661
Balu
2002-12-06 17:35
2002.12.19
Разное поведение Variant в D5 и D6


3-61445
Asderg
2002-11-29 11:02
2002.12.19
можно ли сделать в одном запросе update двух таблиц?