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