AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Desktop-Overlay mit DirectX
Thema durchsuchen
Ansicht
Themen-Optionen

Desktop-Overlay mit DirectX

Ein Thema von hugo1990 · begonnen am 27. Dez 2006 · letzter Beitrag vom 8. Jul 2007
Antwort Antwort
Seite 3 von 5     123 45      
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Desktop-Overlay mit DirectX

  Alt 29. Dez 2006, 11:47
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);
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#22

Re: Desktop-Overlay mit DirectX

  Alt 29. Dez 2006, 13:44
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 (Deinen Code teste ich auch mal aus...)

Edit: 0 bei Win2000 vergessen -.-
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#23

Re: Desktop-Overlay mit DirectX

  Alt 29. Dez 2006, 17:10
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;
Angehängte Dateien
Dateityp: pas uconvert_769.pas (8,3 KB, 49x aufgerufen)
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: Desktop-Overlay mit DirectX

  Alt 29. Dez 2006, 20:29
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.
  Mit Zitat antworten Zitat
Phantom1

Registriert seit: 20. Jun 2003
282 Beiträge
 
Delphi 10.4 Sydney
 
#25

Re: Desktop-Overlay mit DirectX

  Alt 29. Dez 2006, 22:03
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;
Angehängte Dateien
Dateityp: pas uconvert_195.pas (9,6 KB, 65x aufgerufen)
  Mit Zitat antworten Zitat
Leifcp

Registriert seit: 16. Sep 2005
4 Beiträge
 
#26

Re: Desktop-Overlay mit DirectX

  Alt 13. Feb 2007, 16:21
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)
  Mit Zitat antworten Zitat
Leifcp

Registriert seit: 16. Sep 2005
4 Beiträge
 
#27

Re: Desktop-Overlay mit DirectX

  Alt 14. Feb 2007, 13:18
Keine Antwort?
kann doch nicht so schwer sein, oder?
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#28

Re: Desktop-Overlay mit DirectX

  Alt 15. Feb 2007, 20:36
Sorry... ich hatte erst gestern Delphi wieder installiert, da ich meinen PC formatiert hatte

@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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#29

Re: Desktop-Overlay mit DirectX

  Alt 17. Feb 2007, 20:44
Für die Leute die Vista benutzen eine kleine Anmerkung (hab ich gerade herausgefunden ):

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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#30

Re: Desktop-Overlay mit DirectX

  Alt 17. Feb 2007, 23:49
Zitat von JamesTKirk:
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 ^^
Verwendest du irgendwo GetSurfaceDesc()? Das vertraegt sich nicht mit dem DWM von Vista und schaltet den aus -> Aero is weg. Anscheinend soll GetDisplayMode das Problem beheben.

greetz
Mike

PS: Nur so nebenbei, DirectDraw ist depricated. Seit ca. 2003
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz