Störungen, in eigener Transparentz Funktion
-
Auch 'ne Möglichkeit, aber hilft ihm nicht bei seinen Forschungen ... :p
Ausserdem arbeitet die WinGdiEx aus Geschwindigkeitsgründen intern nicht mit 24-Bit-Bitmaps, sondern ausschließlich mit 32-Bit-Bitmaps, wie sich dem Quellcode entnehmen läßt.
Und nebenbei: die in der WinGdiEx enthaltene TransparentBlit-Funktion ist mindestens 20-mal schneller als die hier von Timm wiedergegebene. :o
-
Original erstellt von <JSFreak>:
Nicht ganz unrichtig, deine Vermutung ... aber noch lange nicht vollständig!Ach ja?? Dann könntest du sie bitte auch vervollständigen!? Das wäre sicher auch in Timms Interesse.
-
Wenn Timm tatsächlich Interesse bekunden sollte, bekommt er eine eMail ...
-
Warum willst du uns denn nicht allen die Lösung verraten?
-
Ich weiß es: weil er keinen blassen Schimmer von einer Lösung hat.
-
Sorry, für meinen späten Post, ich hatte noch viel zu tun, Schule und so!!!
@WebFritzi, so ganz kapier ich das noch nicht... muss ich dann irgendwo +1 hinterschreiben, oder minus nehmen
@<...> Der Link ist gut, habs mir schon angeschaut und downloade mir das grad...
-
Ich zeig dir mal wie ich mir das vorstelle:
DWORD DWORD_ALIGN(DWORD x) { if(~(~3 | x) != 3) x = ((x >> 2) << 2) + 4; return x; } void TransparentBlit(HDC hdc, int destX, int destY, int destWidth, int destHeight, HDC hdc2, int srcX, int srcY, UINT tranparency) { // ... // Loop through the 24 bit image (Times 3 for R G and B) int diff = DWORD_ALIGN(3 * destWidth) - 3 * destWidth; int p = 0; for(int i = 0; i < destHeight; i++) { for(int j = 0; j < destWidth; j++) { if((pBackBits[p] != GetBValue(tranparency)) || (pBackBits[p+1] != GetGValue(tranparency)) || (pBackBits[p+2] != GetRValue(tranparency))) { // Assign the desired pixel to the foreground pImageBits[p] = pBackBits[p]; pImageBits[p + 1] = pBackBits[p + 1]; pImageBits[p + 2] = pBackBits[p + 2]; } p+=3; } p+=diff; } // ... }
Besonders die DWORD_ALIGN()-Funktion find ich schön. Hab ich selber gemacht.
Naja, so ungefähr hab ich's mir vorgestellt.
[ Dieser Beitrag wurde am 31.01.2003 um 03:54 Uhr von WebFritzi editiert. ]
-
Besonders die DWORD_ALIGN()-Funktion find ich schön. Hab ich selber gemacht.
Herzlichen Glückwunsch.
Meine Lösung gefällt mir trotzdem besser, ist nicht so kompliziert:
Ausrichten auf WORD
-
Das ist ein schönes Makro. Obwohl ich's nicht so ganz verstehe. Meine Funktion verstehe ich mittlerweile aber auch nicht mehr.
-
Hab ich mir grad ausgedacht... Würds das nicht auch einfach tun?
inline DWORD DwordAlign(DWORD x) { while((x % 4) > 0) ++x; return x; };
-
Nö. Ist falsch! Wenn dann so:
int DWORD_ALIGN(int x) { int r = x % 4; if(r) x += r; return x; }
Verbraucht aber sicher mehr Rechenzeit, denn man arbeitet nicht so nah an der Maschine.