Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Inhalt von Window vergroessern? (https://www.delphipraxis.net/41794-inhalt-von-window-vergroessern.html)

alcaeus 8. Mär 2005 18:53


Inhalt von Window vergroessern?
 
Hallo allerseits,

ich habe den Code aus diesem Beitrag (Link) etwas bearbeitet, um den Output meiner TV-Karte auszugeben. Dies funktioniert auch, allerdings mit einem kleinen Problem: Die TV-Karte gibt mir das Bild in 640x480 Pixel zurueck, ich wuerde es aber gern im Fullscreen-Mode ausgeben. Zum vergroessern eines Bildausschnitts habe ich mir diesen Code (Link) rausgesucht und entsprechend bearbeitet. So sieht das Ganze nun aus:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  camhandle := capCreateCaptureWindow('TV',WS_CHILD+WS_VISIBLE, 0,
  0, Panel1.Width, Panel1.Height, Panel1.Handle, 0); //Wie du siehst, brauchst du ein Panel in diesem Beispiel ;-)
  SendMessage(camhandle, WM_CAP_DRIVER_CONNECT, DrvList[ComboBox1.ItemIndex], 0);
  SendMessage(camhandle, WM_CAP_SET_PREVIEWRATE, 30, 0);
  sendMessage(camhandle, WM_CAP_SET_OVERLAY, 1, 0);
  SendMessage(camhandle, WM_CAP_SET_PREVIEW, 1, 0);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  C: TCanvas;
begin
  C := TCanvas.Create;
  try
    C.Handle := GetWindowDC(camhandle);
    try
      Image1.Picture.Bitmap.PixelFormat := pfDevice;
      Image1.Picture.Bitmap.Canvas.CopyMode := SRCCOPY;
       StretchBlt(Image1.Picture.Bitmap.Canvas.Handle, 0, 0, Pred(Image1.Width), Pred(
              Image1.Height), C.Handle, Screen.DesktopLeft,
              Screen.DesktopTop, Pred(Panel1.Width), Pred(Panel1.Height), Image1.Picture.Bitmap.Canvas.CopyMode);
    finally
       ReleaseDC(camhandle, Canvas.Handle);
    end;
  finally
    C.Free;
  end;
end;
Camhandle ist eine Datei vom Typ HWND, und das Handle wird auf einem unsichtbaren Panel abgelegt. Wenn ich nun auf ersten Button klicke, wird alles erfolgreich gestartet, aber ein Klick auf den naechsten Button zeichnet nichts (es sollte auf dem Canvas des Forms gezeichnet werden). Hab ich irgendwo in meinem Code einen Fehler oder funktioniert das nicht wenn das Window unsichtbar ist? Ich kann dies im Moment nicht testen, da die TV-Karte immer nur am Wochenende zur Verfuegung steht :-?

Kann mir irgendwer helfen?

Thanx and Greetz
alcaeus

Greetz
alcaeus

phlux 8. Mär 2005 19:10

Re: Inhalt von Window vergroessern?
 
also ich weiß, dass das bild nicht größer werden kann als 640.. oder 800.. also bei wintv wars so dass er bei fullscreen die auflösung des monitors runtergeschraubt hat.

alcaeus 8. Mär 2005 19:13

Re: Inhalt von Window vergroessern?
 
Hallo phlux,

nein, Pinnacle macht dies definitiv nicht. Ausserdem sollte der Code ja funktionieren, schliesslich hole ich mir ja nur den DC des Windows, erstelle einen Canvas der als Handle den Handle dieses DC hat, und kopiere den Inhalt mit StretchBlt auf das Form. Mache ich dies fuer Windows-Handle 0 (=Desktop) funktioniert alles bestens, gehe ich aber auf das Handle, welches ich vorher erhalten habe, sehe ich nichts, und ich hab keine Ahnung warum...

Greetz
alcaeus

alcaeus 9. Mär 2005 19:45

Re: Inhalt von Window vergroessern?
 
^^ push ^^
Hat denn keiner einen Rat fuer mich? :cry:

Greetz
alcaeus

Robert_G 9. Mär 2005 19:58

Re: Inhalt von Window vergroessern?
 
Das sieht für mich danach aus, als versuchst du über ein Handle auf eien Faust ein Handle auf einen Nagel in eine Wand zu kloppen.
Für solche Spielereien war Microsoft zu nett und hat DirectShow erfunden. ;)
DsPack ist eine ganz brauchbare Kapselung dafür und sollte sogar eine Demo für TV Capturing mitliefern.
Mit einer Pinnacle Karte kannst du aber gegen die Wand rennne, da die, glaube ich zumindest :gruebel: , keinen DirectShow Filter mitliefern. :?

alcaeus 9. Mär 2005 20:03

Re: Inhalt von Window vergroessern?
 
Zitat:

Zitat von Robert_G
Das sieht für mich danach aus, als versuchst du über ein Handle auf eien Faust ein Handle auf einen Nagel in eine Wand zu kloppen.

Nette Ausdrucksweise ;)

Zitat:

Zitat von Robert_G
Für solche Spielereien war Microsoft zu nett und hat DirectShow erfunden. ;)
DsPack ist eine ganz brauchbare Kapselung dafür und sollte sogar eine Demo für TV Capturing mitliefern.

Ja, und ich hab mir das DSPack auch angesehen, allerdings hatte ich noch nicht Zeit durch die Sourcen zu gehn. Das TV-Capturing-Beispiel ist aber sehr viel speicheraufwaendiger als meine Variante, und das ist mit ein Grund warum ich auf das Pinnacle Media Center verzichten will.

Zitat:

Zitat von Robert_G
Mit einer Pinnacle Karte kannst du aber gegen die Wand rennne, da die, glaube ich zumindest :gruebel: , keinen DirectShow Filter mitliefern. :?

Ich hab (wieder mal) keine Ahnung wovon du sprichst, aber mit den Windows Capturing Methoden bekomme ich wenigstens "Schneefall" auf meinen Bildschirm. Ich werde mich aber mal am Wochenende wieder damit auseinandersetzen, falls ich Zeit dafuer finde...

Greetz
alcaeus

alcaeus 11. Mär 2005 20:00

Re: Inhalt von Window vergroessern?
 
^^ Push ^^

Ich weigere mich aufzugeben. Ich habs jetzt nochmal probiert: wenn das Panel mit dem Window sichtbar ist, dann geht das mit StretchBlt genau ein mal, danach nicht mehr.
Ist das Fenster hingegen unsichtbar, geht nichts. Gibts denn keine Moeglichkeit, den Inhalt groesser zu machen?

Greetz
alcaeus

Christian Seehase 11. Mär 2005 20:29

Re: Inhalt von Window vergroessern?
 
Moin Andreas,

ich hab' s jetzt nicht ausprobiert, vermute aber mal, dass es daran liegt, dass Du Overlay aktiviert hast.

Code:
SendMessage(camhandle, WM_CAP_SET_OVERLAY, [color=red][b]1[/b][/color], 0);
Schalt' dass doch mal ab.

alcaeus 11. Mär 2005 20:39

Re: Inhalt von Window vergroessern?
 
Hallo Christian,

danke fuer den Tipp, aber es hat leider nicht geholfen :(
Ist es moeglich mit DelphiX oder DirectX bessere Ergebnisse zu erzielen? Wenn das geht dann muehe ich mich naemlich nicht laenger mit den dummer Funktionen hier ab...

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 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-2025 by Thomas Breitkreuz