[c++]transparant met alphablend

Pagina: 1
Acties:

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
Ik heb geprobeerd een kleine applicatie te schrijven met zoiets dat je verschillende skins kan gebruiken. Jullie kennen het wel zoiets als winamp met zijn toebehoren.
Ik vind het ook leuk om zoiets transparant te maken.

Na even zoeken in de borland builder vond ik dat alphablend daar wel voor kon zorgen. Hier waren er ook wel enkele topics, maar ik vond niet wat ik wilde weten. Als ik alphablend gebruik en het window verplaats, dan loopt het verplaatsen gewoon wat stroever. Is er iets wat dit verbeterd?

Ik heb hier eens gelezen voor bewegende blokken had je doublebuffered of zoiets maar dat helpt hier niet.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Koop een snellere computer :)

No kidding, layered windows (WS_EX_LAYERED) leveren een flinke performancehit op tov. normale windows. Op een 2Ghz bak loopt het allemaal perfect, maar op 500Mhz of minder is het best pijnlijk hier en daar.

Professionele website nodig?


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
Tja, ik had daar een klein beetje rekening mee gehouden, maar in principe is een AMD 1.4 en geforce 2 gts pro 64mb toch voldoende, hmmz.
Is er dan nog een andere manier om de windows doorzichtig te maken, of moet ik dan weer direct aan opengl gaan denken?

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
wat bedoel je met transparent? als je bepaalde delen gewoon 100% transparent en andere helemaal niet (als een GIF dus) gaat het quasi even snel. Alpha blend (ie waarbij de voor en achtergrond worden gemengd is altijd traag) OpenGL is hier geen oplossing want de GDI van windows gebruikt die niet (OS-X wel).

en dan nog een kwestie van smaak: semi transparent gedoe ziet er maar crap uit imho...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

* curry684 heeft alles transparent op z'n desktop en vindt het er subliem uitzien en heerlijk werken dat je niet meer kwijtraakt :)

Ontopic: AMD 1.4 met GF2GTS moet ruim voldoende zijn voor transparante windows... :? Mag ik vragen hoe je de transparatie maakt?

Professionele website nodig?


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Nou curry684 ik denk of door de W indows 2000 ingebouwde alpha blend functionaliteit (zat in GDI+ volgens mij) of maakt eerst het hele venster transparent. Vervolgens pak je met GeTDC() de image van de onderliggende area en vervolgens pas je een alpha routine toe (notie: je weet dan namelijk zowel de voorgrond als de achtergrond bitmap).

Ik zal de alpha blend routine nog wel eens opzoeken, weet ik zo niet uit me hoofd.

Overigens kun je ook de functie SetLayeredWindowAttributes in user32.dll gebruiken, maar dat werkt dus alleen in Windows 2000 en hoger.

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
curry684 schreef op 09 July 2003 @ 14:00:

Ontopic: AMD 1.4 met GF2GTS moet ruim voldoende zijn voor transparante windows... :? Mag ik vragen hoe je de transparatie maakt?
de alphablend op true en dan is de alphablendvalue variabel.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Lol @ alienfruit, dank voor het heel uitgebreid beantwoorden van mijn vraag maar ik denk dat je toch iets gemist hebt in mijn vraagstelling ;)

Ik mag toch hopen dat ie het niet met de functie AlphaBlend doet (die overigens vanaf Win2k bestaat en in de normale GDI zit: GDI+ is een class-based nieuwe variant erop) want die maakt het inderdaad getikt langzaam.

De correcte methode is een window te maken met WS_EX_LAYERED extended style en idd SetLayeredWindowAttributes te gebruiken. Op die manier kan het echt niet op een 1.4Ghz continu onacceptabel traag zijn.

Professionele website nodig?


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
curry684 schreef op 09 July 2003 @ 17:35:
Lol @ alienfruit, dank voor het heel uitgebreid beantwoorden van mijn vraag maar ik denk dat je toch iets gemist hebt in mijn vraagstelling ;)

Ik mag toch hopen dat ie het niet met de functie AlphaBlend doet (die overigens vanaf Win2k bestaat en in de normale GDI zit: GDI+ is een class-based nieuwe variant erop) want die maakt het inderdaad getikt langzaam.

De correcte methode is een window te maken met WS_EX_LAYERED extended style en idd SetLayeredWindowAttributes te gebruiken. Op die manier kan het echt niet op een 1.4Ghz continu onacceptabel traag zijn.
Dan heb ik mijn antwoord want ik had het inderdaad met de gewone functie alphablend gedaan ;) , was dus niet de goede manier. Kan ik weer verder >:)

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Professionele website nodig?


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
hmmz. Ik heb nu dit gebruikt voor mijn window transparant te maken.
C++:
1
2
3
4
  SetWindowLong(Handle,GWL_EXSTYLE,
      GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_LAYERED);

  SetLayeredWindowAttributes(Handle,NULL,150,LWA_ALPHA);


Eigenlijk levert dit niet veel betere prestaties op, maar al die applicaties die transparant zijn, hebben meestal een breedte van niet meer dan 150 pixels of zoiets. Dat geeft inderdaad absoluut geen problemen, maar als ik naar een breedt van meer dan 400 pixels ga, nou dan merk je dat wel.

btw. Ik denk dat ik ook een mindere grafische kaart heb. Leadtek winfast geforce2 gts pro 64mb.

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
heeft niets met je graphics kaart te maken wel met cpu en snelheid van je normale mem. als je graphics kaart het alpha-blending zou doen je met een 400Mhz alles transparent zetten met een TNT2 kaartje. Alpha blend in software is gewoon traag voor volgende redenen:

a) mathematisch is het niet eenvoudig (echt geet pixel1+pixel2/2).
b) met grotere windows zijn er enorm veel pixels
c) doordat je window nu transparant is moet windows ook alles wat eronder staat gaan updaten. Net dit laatste is waar de GDI van Win32 zo enorm goed is. Tekent geen pixel te veel.

ik heb hier Trillian dat kun je ook transparent zetten en als het window klein is - geen probleem maar zodra het groter wordt of ik het moet gaan draggen over een andere app - een heel pak trager. (TNT2 + 400Mhz).

Overigens kun je in W2K+ ergens iets downloaden dat alle windows transparant kan zetten. Best wel grappig...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Hobbit_be: ik snap wel dat je op 400Mhz + TNT2 problemen hebt, maar op een 1400Mhz bak met Gf2 mag het gewoon nauwelijks merkbaar zijn. Ik denk dat koli-man een beetje paranoia is :)

Tevens gebeurt de alphablending indien beschikbaar wel hardwareaccelerated afaik.

Professionele website nodig?


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
als windows het hardware matig doet: hoedje af. Maar ik vraag me dan wel af: hoe? :) en waarom is die dan zo traag? (als iets in hardware gebeurt maakt het bijna niets uit hoe groot iets is). En het gaat net even traag als ik mijn GF2 erin prop. (zit in mijn snelle machine: een 450 :) MET geluid zelfs ;)).

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

curry684 schreef op 09 July 2003 @ 17:35:
De correcte methode is een window te maken met WS_EX_LAYERED extended style en idd SetLayeredWindowAttributes te gebruiken. Op die manier kan het echt niet op een 1.4Ghz continu onacceptabel traag zijn.
Ooh Sorry. Naja, nu weet je in iedergeval hoe het moet of kan ;)
Heb de andere methode in iets andere vorm ook toegepast in één van me projecten voor school. Heb alleen nooit gekeken of het sneller of vergelijkbaar was met de windows2000 implementatie. Ach zo lang de leraar het snapt (grafisch opleiding en Delphi niet goeie combinatie <g>) is alles goed :Z

Hmm. Overigens heb je helemaal gelijk over GDI/GDI+, heb volgens mij wat door elkaar gehaald.

[ Voor 8% gewijzigd door alienfruit op 09-07-2003 21:50 ]


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
curry684 schreef op 09 July 2003 @ 20:58:
Hobbit_be: ik snap wel dat je op 400Mhz + TNT2 problemen hebt, maar op een 1400Mhz bak met Gf2 mag het gewoon nauwelijks merkbaar zijn. Ik denk dat koli-man een beetje paranoia is :)
Kan goed dat ik een beetje paranoia ben :) , maar ik bedoel dan niet zo dat de pc elke verplaatsing het complete scherm opbouwt. Als het een klein venstertje is dan blijft tijdens het verplaatsen de vorm van de window in tact, maar is die window groter, dan zie ik tijdens het verplaatsen dat de verplaatsing stroef gebeurt. Het is echt niet zo dramatisch, maar ik vroeg het me af wat beter kon en waar het aan kon liggen.

Tja ik kan het niet laten zien, want als ik screenshots neem, dan ziet het er allemaal even scherp en zo uit.

Ach hou het er maar op dat ik een beetje paranoia ben :D

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff

Pagina: 1