with image2 do
begin
//выводим текст во временный TImage c черным фоном
Width :=screen.Width;
Height := screen.Height;
top:= 0;
Left:=0;
// заполняем фон черным
canvas.CopyMode := cmBlackness;
Canvas.Copyrect(Rect(0,0,Image2.Width,Image1.Height), tdc, Rect(0,0,Screen.Width,Screen.Height));
// убираем фон текста, устанавливаем шрифт цвет и выводим
canvas.Brush.Style := bsClear;
canvas.Font.Handle:=TempFont;
canvas.Font.Color:= RGB(red,green,blue);
Canvas.TextOut(tx, ty, str);
end;
//настройки прозрачности
Blend.BlendOp := AC_SRC_OVER;
Blend.BlendFlags := 1;
Blend.SourceConstantAlpha := 128; // прозрачность 50% (0 - 255)
Blend.AlphaFormat := AC_SRC_ALPHA;
//выводим текст на экран
windows.AlphaBlend(dtc.Handle,0,0,screen.Width,screen.Height,image2.Canvas.Handle,0,0,screen.Width,screen.Height,blend);
//ждем-с
sleep(slp);
// ..обновляем
InvalidateRect(0, nil, true);
проблемы с прозрачностью AlphaBlend
подскажите - как побороть?
или может какой то другой метод вывода прозрачного текста поверх всех окон?
вот код:
Код:
Но, судя по результату, ты делаешь не "прозрачность", а "сложение".
Т.е. прозрачность должна быть:
Y := Alpha*Src + (1-Alpha)*Dst;
а у тебя:
Y := Alpha*Src + Dst;
Подозреваю, что
AC_SRC_OVER
надо заменить на что-то другое.
http://articles.org.ru/cn/showdetail.php?cid=6584
там же и описание этой функции AlphaBlend()
ладно... буду дальше ковырятся
Непонятно, что за image1, что за tdc и что за dtc..
Цитата: drxa0z
"Поле BlendOp может принимать единственное значение AC_SRC_OVER"
http://articles.org.ru/cn/showdetail.php?cid=6584
там же и описание этой функции AlphaBlend()
ладно... буду дальше ковырятся
http://articles.org.ru/cn/showdetail.php?cid=6584
там же и описание этой функции AlphaBlend()
ладно... буду дальше ковырятся
В таком случае это - проблемы выбранного инструмента.
Сами по себе API поддерживают гораздо больший список поддерживаемых режимов смешивания.
Погльзуйся оригинальными библиотеками, а не оболочками для них.
PS. Прошу прощения, сразу не заглянул по ссылке. Думаю, для корректного смешивания стоит пользоваться не GUI-шным WinAPI, а DirectX или OpenGL. При наличии специализированнызх инструментов общие вряд ли будут вылизываться и доводиться до ума. Т.е. собственно, совет прежний - пользоваться адекватным задаче API.
Код:
//настройки прозрачности
Blend.BlendOp := AC_SRC_OVER;
Blend.BlendFlags := 0;
Blend.SourceConstantAlpha := 128; // прозрачность 50% (0 - 255)
Blend.AlphaFormat := 0;
Blend.BlendOp := AC_SRC_OVER;
Blend.BlendFlags := 0;
Blend.SourceConstantAlpha := 128; // прозрачность 50% (0 - 255)
Blend.AlphaFormat := 0;
вообщем пошел изучать опенЖЛ