![]() |
Re: Desktop-Overlay mit DirectX
Habe gerade festgestellt, das wenn ich für die YUV berechnung nur einen Farbton (z.B. r) nehmen, dann ist es immer noch ein buntes gekrissele, obwohl es dann Schwarz/Weiß sein müsste. Also hab ich ein bisschen rumgebasstelt und rausgefunden, das er statt Weiß immer einen Grünton anzeigt. Wo könnte der Fehler liegen. Ich hab jetzt für die Berechnung auch mal das genommen, wie es in der c++ Datei steht, also folgender Maßen:
Delphi-Quellcode:
y:=Trunc(0.29*r+0.59*r+0.14*r);
u:=Trunc(128-0.14*r-0.29*r+0.43*r); v:=Trunc(128+0.36*r-0.29*r-0.07*r); |
Re: Desktop-Overlay mit DirectX
Jetzt wo ich bei mir zu Hause ebenfalls einen Rechner gefunden habe, der nur YUV unterstützt (meinen Win2000/98 Testrechner), werde ich mich mal daran machen das auszutesten. Melde mich dann wieder :zwinker: (Deinen Code teste ich auch mal aus...)
Edit: 0 bei Win2000 vergessen -.- |
Re: Desktop-Overlay mit DirectX
Liste der Anhänge anzeigen (Anzahl: 1)
Für die Umwandlungen in YUY2, UYVY und I420 hab ich vor einiger Zeit eine Unit geschrieben (siehe Anhang). Man braucht jedoch die GR32 Komponenten, da ich das TBitmap32 benutze. Mit ein paar änderungen an meinem Code würde auch ein normales TBitmap funktionieren.
Delphi-Quellcode:
function TForm1.CopyImageToSurface(Bmp32: TBitmap32; surface: IDirectDrawSurface7): Boolean;
var ddsd: TDDSURFACEDESC2; src, dest: Pointer; begin Result:=False; FillChar(ddsd, SizeOf(ddsd), 0); ddsd.dwSize:=SizeOf(ddsd); if FAILED(surface.Lock(nil, ddsd, DDLOCK_SURFACEMEMORYPTR or DDLOCK_WAIT, 0)) then Exit; src:=Bmp32.PixelPtr[0, 0]; dest:=ddsd.lpSurface; case ddsd.ddpfPixelFormat.dwFlags of DDPF_RGB: case ddsd.ddpfPixelFormat.dwRGBBitCount of 32: Move(src^, dest^, ddsd.dwHeight*ddsd.dwWidth*4); 24: Conv32to24(src, dest, ddsd.dwWidth, ddsd.dwHeight); 16: if ddsd.ddpfPixelFormat.dwGBitMask=$03E0 then Conv32to15(src, dest, ddsd.dwWidth, ddsd.dwHeight) else Conv32to16(src, dest, ddsd.dwWidth, ddsd.dwHeight); end; DDPF_FOURCC: case ddsd.ddpfPixelFormat.dwFourCC of YUY2: ARGBtoYUY2(src, dest, ddsd.dwWidth, ddsd.dwHeight); UYVY: ARGBtoUYVY(src, dest, ddsd.dwWidth, ddsd.dwHeight); I420: ARGBtoI420(src, dest, ddsd.dwWidth, ddsd.dwHeight); end; end; surface.Unlock(nil); Result:=True; end; |
Re: Desktop-Overlay mit DirectX
Cool vielen vielen Dank an Phantom1, jetzt geht es, nur irgendwie ist das weiß ein grau. Muss das so sein.
Edit: Das weiß ist doch nicht grau es ist nur dreckig. :lol: |
Re: Desktop-Overlay mit DirectX
Liste der Anhänge anzeigen (Anzahl: 1)
Ich seh grad, ich hab eine alte version hochgeladen, da waren noch 2 oder 3 fehler drinnen. Im Anhang findet ihr die neuere Version.
Delphi-Quellcode:
function TForm1.CopyImageToSurface(Bmp32: TBitmap32; surface: IDirectDrawSurface7): Boolean;
var ddsd: TDDSURFACEDESC2; begin Result:=False; FillChar(ddsd, SizeOf(ddsd), 0); ddsd.dwSize:=SizeOf(ddsd); if FAILED(surface.Lock(nil, ddsd, DDLOCK_SURFACEMEMORYPTR or DDLOCK_WAIT, 0)) then Exit; with ddsd do ARGBToCodec(Bmp32.PixelPtr[0, 0], lpSurface, dwWidth, dwHeight, ddpfPixelFormat.dwRGBBitCount, ddpfPixelFormat.dwFourCC); surface.Unlock(nil); Result:=True; end; |
Re: Desktop-Overlay mit DirectX
Hey,
ich kriege den Fehler "Undefinierter Bezechner 'DDCAPS_DX7'"... Dabei habe ich alle schon gelinkten DirectX-Header drin - kann mir jemand sagen, wie ich den Fehler beseitige?! Vielen Dank, Leif ;O) |
Re: Desktop-Overlay mit DirectX
Keine Antwort?
kann doch nicht so schwer sein, oder? |
Re: Desktop-Overlay mit DirectX
Sorry... ich hatte erst gestern Delphi wieder installiert, da ich meinen PC formatiert hatte :roll:
@Topic: Welche Headers verwendest du denn? Ich hab mir heut die neuesten Clooties runtergladen, den Ordner dem "jungfräulichem" Delphi bekannt gegeben und kompiliert... funzt wie beim letzten Mal als ich's verwendet hab :mrgreen: |
Re: Desktop-Overlay mit DirectX
Für die Leute die Vista benutzen eine kleine Anmerkung (hab ich gerade herausgefunden :mrgreen: ):
Beim verwenden von DirectDraw zum Zeichnen auf den Desktop wird von Aero auf Vista Basic umgeschalten! Liegt wohl daran, dass Aero DirectX verwendet und man mit DirectDraw auf eine etwas andere Art auf die Grafikkarte zugreift... Irgendwie so ^^ Btw: Mal schauen, ob es durch die Verwendung von DirectX durch Aero nicht leichter für mich wird nen animierten Desktop unterzubringen (die Ultimate Extras könnens ja auch ;) ). Dann müsste ich nur noch eine Abfrage einbauen, ob Vista oder nicht :mrgreen: |
Re: Desktop-Overlay mit DirectX
Zitat:
greetz Mike PS: Nur so nebenbei, DirectDraw ist depricated. Seit ca. 2003 :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz