Megválaszolatlan hozzászólások | Aktív témák Pontos idő: kedd máj. 07, 2024 13:05



Hozzászólás a témához  [ 5 hozzászólás ] 
DirectDraw 
Szerző Üzenet
vas-tag

Csatlakozott: hétf. máj. 07, 2007 21:33
Hozzászólások: 2
Hozzászólás 
Sziasztok!

Azért más jellegű Ddraw-hoz tartozó kérdéseket is feltehettek, hátha válaszol valaki!


kedd máj. 08, 2007 20:22
Profil Privát üzenet küldése
vas-tag

Csatlakozott: hétf. máj. 07, 2007 21:33
Hozzászólások: 2
Hozzászólás 
Sziasztok!
Bár rég senki sem írt a topicba,azért én is válaszolok,hátha segítek valakinek!.
A DDraw átlátszóság megoldása a <Wingdi.h> ban és a hozzátartozó msimg32.lib -ben van leírva!
Kell a forrásfelület HDC-je (cime) és a célfelület HDC-je
ezeket egyszerű GetDC() függvénnyel megkapjuk.
Azután szükség van egy BLENDFUNCTION tipusú struktúrára ennek kitöltése pl.:
BLENDFUNCTION bl;
bl.AlphaFormat= 0;
bl.BlendFlags=0;
bl.SourceConstantAlpha= 128;// 0és 255 közötti érték az átlátszóság mértéke
bl.BlendOp=0;

És meg kell hívni az AlphaBlend függvényt, dekralációja:
BOOL AlphaBlend(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of upper-left corner
int nYOriginDest, // y-coord of upper-left corner
int nWidthDest, // destination width
int nHeightDest, // destination height
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of upper-left corner
int nYOriginSrc, // y-coord of upper-left corner
int nWidthSrc, // source width
int nHeightSrc, // source height
BLENDFUNCTION blendFunction // alpha-blending function
);
kiválóan lehet nagyítani, kicsinyíteni, és az átlátszóságot állítani.
:D :D :D


hétf. máj. 07, 2007 21:53
Profil Privát üzenet küldése
ezüst tag
Avatar

Csatlakozott: vas. okt. 22, 2006 10:18
Hozzászólások: 13
Hozzászólás 
Dester írta:
Nem egyszerű a kérdésed. DirectDraw-t nem használtam, de kétlem, hogy a részleges átlátszóságot ne tudná. Egyébként Win2000/XP alatt már elérhető (Delphi alatt) az AlphaBlend tulajdonság, amivel egy formnak részleges átlátszóságot tudsz adni. Szóval szerintem itt nem DD lesz a megoldás.
Másrészt - ugyan a C# ezen részét nem ismerem - úgy néz ki, hogy a KeyColor csak 1 bites átlátszóságot tud, tehát neked mindenképp valami Alpha tulajdonságot kéne keresned. Ez valószínűleg csak a hagyományostól eltérő alakú formok kialakításában játszik szerepet egy maszkkal kombinálva.
Delphi alatt a fenti a megoldás, a többit nem ismerem.


Mint említettem Delphi alatt is programozom, így amít említettél már használtam, Delphi 7 alatt jelent meg elöször ez az AlphaBlend tulajdonság, de szerintem a Delphi ehhez a GDI-t használja. Egyébként C# alatt nincs ilyen tulajdonsága a form-nak, de nekem nem is ez kell, egyszerűen rajzolni szeretnék a képernyőre (nem a form-ra), erre csak az overlay jó, ez nem is vitás, a DD-t azért használom mert igen gyors mivel közvetlenül elérem a videókártya memóriáját, illetve bemásolhatok oda más képeket is off-screen (a 256MB-on elfér ugye pár kép :) ) és innen pedig hardware-esen tudom "bevágni" a képernyőre, ráadásul még nagyítnai, kicsinyiteni is hardveressen lehet ha támogatja a kártya. Akár még a főképernyőre is irhatok közvetlenül, bár ezzel vigyázni kell, mert igy "ráfirkálok" az ott lévő ablakokra is, és erről a windows nem is fog tudni, igy nem frissiti, ha elmozgatom onnan. Ami a lényeg, hogyha beállítom az alpha csatornát, hogy használhassam, akkor kiakad a DD inicializáláskor, de nem tudom, hogy azért mert rosszul csinálom, vagy azért mert nem támogatja. Egy másik ötletem az volt, hogy ha már úgy is hozzáférek a képernyőhöz elöször kiolvasom az eredeti pixelt, majd szoftveressen megvalósítva az átlátszóságot "összekeverem" megfelelő arányban (az alpha csatorna szerint) az új pixelellel. Müködni müködik a dolog, de valamiért villódzik, pedig lockolom a surface-t irás elött, off-screen modosítom, vagyis kirakáshoz dupla buffert használok, és a szinkronra is figyelek mikor megcserélem őket.

Valahol egyébként azt olvastam, hogy bár a DD Overlay Interface tartalmazza az alpha csatorna kezelést, végülis mégsem implmentálták ezt a DD-be...

u.i.: Egyébként a keycolor nem 1 bites hanem 32 bites, egy RGB színt lehet itt megadni, ha ez a szín szerepel valahol a képben akkor az teljessen átlátszó lesz a képernyőre kirakva, a többi szín pedig megjelenik "rendessen". Pl. ha a 0,0,0-állítod be ami a fekete, akkor ez átlátszó lesz, és ahol tényleg feketét akarsz megjeleníteni ott pl. a 0,0,1 RGB kódot használhatod, amirő ember meg nem mondja hogy 1 árnyalattal világossab fekete.


csüt. nov. 16, 2006 11:25
Profil Privát üzenet küldése
Moderátor
Avatar

Csatlakozott: kedd nov. 02, 2004 17:38
Hozzászólások: 5120
Tartózkodási hely: Budapest/Szeged
Hozzászólás 
Nem egyszerű a kérdésed. DirectDraw-t nem használtam, de kétlem, hogy a részleges átlátszóságot ne tudná. Egyébként Win2000/XP alatt már elérhető (Delphi alatt) az AlphaBlend tulajdonság, amivel egy formnak részleges átlátszóságot tudsz adni. Szóval szerintem itt nem DD lesz a megoldás.
Másrészt - ugyan a C# ezen részét nem ismerem - úgy néz ki, hogy a KeyColor csak 1 bites átlátszóságot tud, tehát neked mindenképp valami Alpha tulajdonságot kéne keresned. Ez valószínűleg csak a hagyományostól eltérő alakú formok kialakításában játszik szerepet egy maszkkal kombinálva.
Delphi alatt a fenti a megoldás, a többit nem ismerem.


csüt. nov. 16, 2006 8:52
Profil Privát üzenet küldése Honlap
ezüst tag
Avatar

Csatlakozott: vas. okt. 22, 2006 10:18
Hozzászólások: 13
Hozzászólás DirectDraw
A DirectDraw Overlay technikával "rajzolok" a képernyőre C# alatt, ez müködik is és nagyságrendekkel gyorsabb, mint a GDI+, egy gondom van, nem tudom használni az alpha csatornát, mindig kiakad a Surface inicializálásakor!! Van ugye a caps.KeyColor struktúra amivel megadhatom, hogy melyik az a szin ami átlátszó, a többi meg nem, ez müködik is, de vagy teljessen átlátszó vagy egyáltalán nem, ezzel nem tudok részleges átlátszóságot elérni. Tud valaki segíteni, programozott itt valaki DirecDraw-t? Jöhet C,C++,Delphi példa is, ezekben is programozom. Olvastam olyat is, hogy állítólag ez nincs is implementálva a DirectDraw-ba, igaz ez? Ha igen akkor hogy csinálják a "félig" átlátszó formokat?


szer. nov. 15, 2006 19:23
Profil Privát üzenet küldése
Hozzászólások megjelenítése:  Rendezés  
Hozzászólás a témához   [ 5 hozzászólás ] 

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég


Nem nyithatsz témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Magyar fordítás © Magyar phpBB Közösség