Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2015, 08:27   #1
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию Canvas и Полупрозрачность

Здравствуйте, есть компонент наследник TGraphicControl, рисую собственно окошки, хочу сделать их полупрозрачными (на n-ное количество процентов). Все они рисуются по координатам, весь экран один битмап. Пробовал складывать пиксели вручную, не выходит, да и медленно как то. Пробовал AlphaBlend, вообще черный экран. Помогите)



Код:
        temp.Canvas.Pen.Style:=psDash;
        temp.PixelFormat:=pf32bit;
        temp.Width:=ww[i].width;
        temp.Height:=ww[i].height;
        temp.Canvas.Rectangle(0,0,temp.width,temp.height);

        blend.BlendOp:=AC_SRC_OVER;
        blend.BlendFlags := 0;
        blend.AlphaFormat := AC_SRC_ALPHA;
        blend.SourceConstantAlpha := 155;

        windows.AlphaBlend(FBitmap.Canvas.Handle,
                           ww[i].x,height-ww[i].y,ww[i].width,ww[i].height,
                           temp.Canvas.Handle,
                           0,0,temp.width,temp.height,
                           blend);
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Старый 20.03.2015, 10:15   #2
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

У тебя в альфа-канале пустота, отсюда и "черный экран". Либо заполни последний байт каждого пиксела значением $ff, либо AlphaFormat:=0. Для последнего варианта можно и PixelFormat:=pf24bit.
x128 вне форума Ответить с цитированием
Старый 20.03.2015, 10:23   #3
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от x128 Посмотреть сообщение
У тебя в альфа-канале пустота, отсюда и "черный экран". Либо заполни последний байт каждого пиксела значением $ff, либо AlphaFormat:=0. Для последнего варианта можно и PixelFormat:=pf24bit.
Не совсем понял, что такое AlphaFormat? И формат пикселей менять не буду ибо temp я вообще планирую убрать, рисование будет только на одном битмапе.
И как заполнить последние байты, и есть ли для этого стандартные методы?) и как повлияет на фпс?

Код:
       windows.AlphaBlend(FBitmap.Canvas.Handle,
                           ww[i].x,height-ww[i].y,ww[i].width,ww[i].height,
                           FBitmap.Canvas.Handle,
                           ww[i].x,height-ww[i].y,ww[i].width,ww[i].height,
                           blend);
Здравствуйте

Последний раз редактировалось NEoMASTERR; 20.03.2015 в 10:26.
NEoMASTERR вне форума Ответить с цитированием
Старый 20.03.2015, 11:19   #4
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от NEoMASTERR Посмотреть сообщение
Не совсем понял, что такое AlphaFormat?
Тот который у тебя blend.AlphaFormat := AC_SRC_ALPHA.

Цитата:
Сообщение от NEoMASTERR Посмотреть сообщение
И как заполнить последние байты, и есть ли для этого стандартные методы?
Смотря что называть стандартными методами. Если штатное рисование на канве, то не выйдет, т.к. это GDI. Можно через Sacnline, будет быстро и вроде как стандартно. На скорости это конечно же скажется, но не думаю, что это будет сильно заметно. Я бы остановился на варианте с AlphaFormat:=0.
x128 вне форума Ответить с цитированием
Старый 20.03.2015, 11:59   #5
NEoMASTERR
Форумчанин
 
Аватар для NEoMASTERR
 
Регистрация: 22.12.2010
Сообщений: 175
По умолчанию

Цитата:
Сообщение от x128 Посмотреть сообщение
Тот который у тебя blend.AlphaFormat := AC_SRC_ALPHA.


Смотря что называть стандартными методами. Если штатное рисование на канве, то не выйдет, т.к. это GDI. Можно через Sacnline, будет быстро и вроде как стандартно. На скорости это конечно же скажется, но не думаю, что это будет сильно заметно. Я бы остановился на варианте с AlphaFormat:=0.
Огромное спасибо, сделал и через ScanLine и через AlphaFormat := 0;
Сейчас буду проверять на быстродействие)
Здравствуйте
NEoMASTERR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полупрозрачность картинки в Access fyedor Microsoft Office Access 2 20.02.2013 07:58
полупрозрачность текста в ИЕ Алек Помощь студентам 1 01.02.2012 15:48
статья - Полупрозрачность в Delphi Pblog Обсуждение статей 2 30.08.2010 11:01
Прозрачность и полупрозрачность Алкаш Мультимедиа в Delphi 4 25.11.2008 01:04
Полупрозрачность - как? t3ns0r Общие вопросы Delphi 13 10.08.2007 10:04