Einzelnen Beitrag anzeigen

Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Inhalt von Window vergroessern?

  Alt 8. Mär 2005, 19:53
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat