-
> а что мне действительно не понравилось, почему в GDI все > 24х битное
в gdi все зависит от характеристик растра, на котором он рисует. Через 32-х битный битмап, по крайней мере, альфа очень даже учитывается
-
я создаю tbitmap с pf32bit, рисую на нем цветом: function Get_color_transparent(col:tcolor; trans:byte):integer;
begin
result:=col or (trans shl 24);
end;
var col:integer;
begin
col:=Get_color_transparent(clred,128); получаю обнуленную альфу :(
-
На некоторых системах она вообще не работала (на win2k, она не от GDI+ зависит?)У меня как раз на win2k работает. Хотя я только на одной машине тестировал. От GDI+ AlphaBlend не должна зависеть, она в msimg32.dll находится, которая есть даже в win98. Но в 98 она работает только при выводе на экран, в битмап - сразу AV; впрочем, официально 98 вообще не поддерживается ( http://msdn.microsoft.com/en-us/library/dd183351(VS.85,printer).aspx ). Вообще непонятно, что там может глючить. Пытается аппаратно ускорять и не получается из-за кривых драйверов? Но ты же использовал, наверное, вариант битмап->битмап с pf32bit, а там никакого ускорения не может быть в принципе. Попытался поискать (хотя и не очень старательно) - нашёл только это: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=100477Там с выводом на экран, довольно специфичный случай. А еще она позволит вывести с полупрозрачностью картинку с альфой? :)Одновременно с попиксельной и общей альфой - да, хотя и несколько медленнее (что в общем понятно). "The SourceConstantAlpha value is combined with any per-pixel alpha values" (MSDN). да еще с перерасчетом альфы конечного изображения (вот это меня заставило окончательно от нее отказаться).Судя по формулам отсюда: http://msdn.microsoft.com/en-us/library/dd183393(VS.85,printer).aspx Dst.alpha она должна считать - возможно, не так, как тебе нужно, но не затирать 0-м во всяком случае. Вообще я не спорю с тем, что самописные функции удобнее, гибче, в некоторых случаях - быстрее, и т.д. Просто подумал, что автору вопроса для начала подошла бы и стандартная.
-
-
Спасибо всем...) ^_^ А как насчёт "Windows Vista / 7" и их знаменитого "Aero" ? Я слышал, мол, в XP весь интерфейс построен на AlphaBlend, а в "Windows Vista / 7" MicroSoft просто доработало старую функцию AlphaBlend добавив новых функций, оптимизировав и ускорив её... Это так? А можно ли пользоваться этой обновлённой AlphaBlend в XP ? Более удобные и производительные способы - это, конечно, превосходно и я буду разбираться со способом antonn'а... Но ведь и "классику" надо знать... ;)
-
Я слышал, мол, в XP весь интерфейс построен на AlphaBlend, а в "Windows Vista / 7" MicroSoft просто доработало старую функцию AlphaBlend добавив новых функций, оптимизировав и ускорив её..
А я слышал, что рендер Висты построен на аппаратном ускорении. Ну и просто по логике - иначе зачем Aero требует видеокарту с шейдерами? (хотя логика у MS зачастую странная...) Если бы были какие-то обновления в AlphaBlend - в MSDN было бы об этом написано, а там (см. ссылки из [22]) ничего нет. MS, кажется, сейчас больше склонен придумывать новые API, чем развивать старые - для Висты вот придумали Direct2D. Как бы из объективных соображений, но и не без субъективного желания перетащить на новую ОС. Точнее даже не для Висты, а для 7-ки, поддержку Висты ещё только обещают. В общем, у MS либо малофункциональная "классика", либо сверхсовременный в первую очередь по системным требованиям "модерн". Ну ещё GDI+ есть как некий промежуточный вариант, но его часто ругают за тормознутость. И чем пытаться выбрать из ассортимента MS меньшее из зол - возможно, лучше изучать основы, либо обработку изображений на софтвере, по примерам Антона или на какой-нибудь другой open-source граф. библиотеке, либо аппаратную графику на базовом API - OGL, D3D.
-
> А я слышал, что рендер Висты построен на аппаратном ускорении.
Я это и про 98 слышил.
> (вот тот яркорозовый фон который применяют обычно для transparent > color с нанесенным изображением).
Я такое и в DX7 наблюдал. На всех картачках норм на одной розовый фон.
Выход один делать все что в наших силах.
-
Судя по информации отсюда: http://en.wikipedia.org/wiki/Desktop_Window_ManagerGDI (рисование клиентской области окон) не ускоряется, более того, отрезали даже те зачатки ускорения, которые у него были (впрочем, настолько кривые, что мне их не жалко). Ускоряется рисование заблюренных рамочек, тумбнэйлов окон, смешивание полупрозрачных окон, сворачивание-разворачивание в 3D и т.п. Хотя почти всё из этого набора, ИМХО, можно сделать и на софтвере, разве что достаточно быстрое 3D-разворачивание получить тяжко. В общем, с классическими GDI-приложениями получается "полуаппаратная" графика. Полностью аппаратная - только при выводе UI новыми средствами вроде WPF (вероятно, там переписали рисование контролов на D3D). Впрочем, в случае WPF тормоза .NET, наверное, успешно компенсируют всякое ускорение. В других источниках пишут примерно то же самое: http://blogs.msdn.com/greg_schechter/archive/2006/03/05/544314.aspxhttp://blogs.msdn.com/greg_schechter/archive/2006/03/10/549310.aspx
-
Что ж делать? :(
-
А что нужно-то? Спецэффекты в стиле Vista Aero? Так я уже писал: "почти всё из этого набора, ИМХО, можно сделать и на софтвере" ну и далее см. "лучше изучать основы, либо обработку изображений на софтвере, по примерам Антона или на какой-нибудь другой open-source граф. библиотеке". Какие-нибудь другие - это, например, FastLIB, Graphics32, SpriteUtils-2, DelphiX/TDIB и т.д. По поводу FastLIB vs TBitmap я уже высказывался здесь ( [99]): http://pda.delphimaster.net/?id=1186325580&n=9&p=5По теории обработки изображений есть неплохой сайт (на английском): http://homepages.inf.ed.ac.uk/rbf/HIPR2/index.htm
-
Вот как раз с английским и плоховато... Особенно с техническим...((
Мануалы-то смотрел, но по английски не понятно ничего...(
"рендер Висты построен на аппаратном ускорении" - а как это на деле? Самому можно тоже как-то так делать? Кстати, а кто из "кто-нибудь других" Вам больше нравится и почему (из-за каких достоинтств) ? :)
-
"рендер Висты построен на аппаратном ускорении" - а как это на деле? Самому можно тоже как-то так делать?Если коротко - каждое окно рисует себя не прямо на экран, а во внутренний буфер (битмап), затем эти битмапы отдаются Desktop Window Manager, который перегоняет их в D3D-текстуры и рисует окна как полигоны с наложением этих текстур, с любыми доступными через 3D эффектами. Как рисовать полигоны - см. Краснова: http://d3dengine.narod.ru/books.htmlИли исходники 2D-игрушек c igdc.ru. Единственный относительно сложный эффект, для которого требуются шейдеры - пресловутые заблюренные рамочки (если, конечно, список спецэффектов Aero исчерпывается тем, что я перечислил в [27] - я с Вистой "вживую" работал всего минут 15, чего-то мог и не заметить). По шейдерам при желании тоже можно найти материалы: http://forum.vingrad.ru/forum/topic-73464.htmlНу и примеры к DX9 SDK с clootie.ru. Кстати, а кто из "кто-нибудь других" Вам больше нравится и почему (из-за каких достоинтств) ? :)Ещё раз для тех кто в танке: http://pda.delphimaster.net/?id=1186325580&n=9&p=599-й пост, в самом конце страницы. К достоинствам могу добавить компактность, нет привязки к сторонним модулям (даже из стандартных используется только windows.pas). Есть у FastLIB и свои недостатки - кривость с т.з. ООП, неустойчивость к ошибкам, отсутствие документации и некоторых важных функций (того же попиксельного альфа-блендинга в стандартном комплекте нет, хотя для себя я давно написал/утащил из SpriteUtils). Graphics32 примечательна главным образом тем, что есть готовые компоненты для отображения картинки (аналог TImage), встроенная работа со слоями, элементы векторной графики. SpriteUtils шустра, но неудобна в использовании, заточена главным образом под KOL, исходники плохо читаются из-за чрезмерного пристрастия автора к ассемблеру. Хотя можно использовать как практическое пособие по asm.
-
-
Удалено модератором
-
Удалено модератором
-
> [17] Sapersky (02.06.09 11:46)
> Хм, а чем так страшна AlphaBlend?
вот тоже не понятно, по-моему отлично работает. в крайнем случае можно результирующий битмап 24 битным сделать.
-
> Eraser © (30.07.09 03:48) [35] > > > [17] Sapersky (02.06.09 11:46) > > > > Хм, а чем так страшна AlphaBlend? > > вот тоже не понятно,
[18] :)
-
Sapersky, но это же внутри TImage... А как рисовать так саму форму? =))
-
В моих примерах TImage используется только для хранения картинки. С тем же успехом можно грузить и из файлов, просто мне лень было вспоминать, как загрузить jpeg используя стандартный модуль. А рисуется всё либо на форму (в первом примере есть переключатель to bitmap/to screen), либо в буферный битмап по размеру формы (точнее, PaintBox'а, который задаёт область рисования) и потом этот битмап выводится на PaintBox. И кстати, у меня с использованием буфера рисуется быстрее, особенно заметно при использовании общей прозрачности, разница более чем в 10 раз.
-
Соглашусь с автором. Многое из вышеперечисленного действительно актуально
|