 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
pebisoft gesperrt
Anmeldungsdatum: 28.11.2004 Beiträge: 131
|
Verfasst am: 04.10.2006, 23:11 Titel: warum kommt nach einem tastendruck kein neues bild? |
|
|
das bild "test.bmp" wird jede sekunde von einem anderen programm geändert abgespeichert.
dieses bild lese ich nach tastendruck jedesmal neu ein mit unterem programm.
ich versuche es jedenfalls. erst wenn ich das screenfenster ein bisschen mit der maus bewege, geht es mit einem tastendruck und es erscheint das bild im fenster. wenn ich das screenfenster nicht bewege, und ich drücke eine taste, tut sich nichts.
#include "windows.bi"
#Include "fbgfx.bi"
Option Explicit
Dim img As Integer Ptr
Dim As Integer breit, hoch
Dim As Uinteger Post_Quit = FALSE
Screen 18,32 'Bit per Pixel = 32
breit = 400 'Bildbreite und
hoch = 400 'Bildhöhe sind bekannt
img = ImageCreate (breit, hoch)
Do
BLoad "test.bmp",img
Put (20,20), img, PSet
If ( Multikey( SC_ESCAPE ) ) Then Post_Quit = TRUE
sleep
Loop Until Post_Quit
ImageDestroy img
End
Zuletzt bearbeitet von pebisoft am 06.10.2006, 09:57, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 05.10.2006, 09:33 Titel: |
|
|
Es ist möglich, dass der Focus nicht auf deinem Fenster liegt und das Programm damit deinen Tastendruck nicht mitbekommt.
Versuch mal eine Bilderneuerung ohne Tastendruck indem du
schreibst. D.h. alle 0,5sek wird das Bild automatisch erneuert.
Gruß Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
pebisoft gesperrt
Anmeldungsdatum: 28.11.2004 Beiträge: 131
|
Verfasst am: 05.10.2006, 20:23 Titel: |
|
|
ich habe jetzt herausgefunden, das es dieses captureprogramm ist.
erst wenn ich das screen-programm mit der maus bewege, schreibt dieses programm eine neue test1.bmp in das verzeichnis.
was muss hier geändert werden?
in der Case WM_PAINT habe ich auch mal eine pause reingeschrieben,
geht aber immer noch nicht.
Code: |
#include once "win\vfw.bi" 'Die vfw.bi includet schon die windows.bi
Option Explicit
Function WindowProc (Byval hWnd As HWND,_
Byval uMsg As uint,_
Byval wParam As WPARAM,_
Byval lParam As LPARAM) As LRESULT
Dim hDC As HDC
Dim ps As PAINTSTRUCT
Static hWndCam As HWND
Select Case uMsg
Case WM_CREATE
hWndCam = capCreateCaptureWindow ("CapCam", WS_CHILD Or WS_VISIBLE, _
15, 40, 320, 240, hWnd, 500)
If hWndCam = 0 Then
MessageBox (hWnd, "keine Webcam gefunden ..", "Fehler", MB_ICONERROR)
DestroyWindow (hWnd)
Return 0
End If
capDriverConnect (hWndCam, 0) 'nur für eine WebCam sonst, iIndex=1,2,3 ...
capPreviewRate (hWndCam, 30)
capPreview (hWndCam, 1) 'Vorschau (de)aktivieren
'capGrabFrameNoStop (hWndCam) 'Videostream zeigen
capFileSaveDIB(hWndCam, @"test1.bmp") 'Schnappschuss als CapCam1.bmp
'capEditCopy(hWndCam)
Return 0
Case WM_COMMAND
Return 0
Case WM_PAINT
hDC = BeginPaint (hWnd, @ps)
capFileSaveDIB(hWndCam, @"test1.bmp")
sleep 500
EndPaint (hWnd, @ps)
Return 0
Case WM_CLOSE
'Beim Beenden muss die WebCam wieder freigegeben werden!
capDriverDisconnect (hWndCam)
DestroyWindow (hWnd)
Case WM_DESTROY
PostQuitMessage (NULL)
Return 0
Case Else
Return DefWindowProc (hWnd, uMsg, wParam, lParam)
End Select
End Function
Function WinMain (Byval hInstance As HINSTANCE,_
Byval hPrevInstance As HINSTANCE,_
Byval lpCmdLine As LPSTR,_
Byval nCmdShow As Integer) As Integer
Dim hWnd As HWND
Dim wMsg As MSG
Dim wcx As WNDCLASSEX
Dim className As String = "webcam_class"
'WNDCLASSEX structure
With wcx
.cbSize = Sizeof (WNDCLASSEX)
.style = CS_HREDRAW Or CS_VREDRAW Or CS_BYTEALIGNWINDOW
.lpfnWndProc = cast (WNDPROC, @WindowProc)
.cbClsExtra = NULL
.cbWndExtra = NULL
.hInstance = hInstance
.hbrBackground = CPtr( HGDIOBJ, COLOR_BACKGROUND )
.lpszMenuName = NULL
.lpszClassName = Strptr (className)
.hIcon = LoadIcon (NULL, IDI_APPLICATION)
.hCursor = LoadCursor (NULL, IDC_ARROW)
.hIconSm = 0
End With
RegisterClassEx (@wcx)
hWnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,_
Strptr (className), "Webcam Beispiel",_
WS_OVERLAPPEDWINDOW,_
CW_USEDEFAULT, CW_USEDEFAULT, 360, 320,_
NULL, NULL,_
hInstance, NULL)
ShowWindow (hWnd, SW_SHOWNORMAL)
UpdateWindow (hWnd)
Do Until (GetMessage (@wMsg, NULL, 0, 0) = 0)
TranslateMessage (@wMsg)
DispatchMessage (@wMsg)
Loop
Return wMsg.wParam
End Function
'Entry point
End WinMain (GetModuleHandle (NULL), NULL, Command$, SW_NORMAL)
|
|
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 05.10.2006, 22:54 Titel: |
|
|
is klar, da WM_PAINT nur dann ausgeführt wird wenn das Fenster verändert wird.
Ein fortlaufendes kopieren des Bildes bekommst du nur durch eine TIMER - Steuerung.
Und da wir ja jetzt auch ein DIB aus dem Clipboard laden können
hab ich das gleich mal eingebaut.
Code: | 'Beispiel: Webcam Sekundenbilder in das Clipboard
'05.10.2006 by Volta
#include once "win\vfw.bi" 'Die vfw.bi includet schon die windows.bi
'libavicap32.dll.a nach FBverzeichnis/lib/win32 schieben.
Option Explicit
#define ID_TIMER 1
Function WindowProc (Byval hWnd As HWND,_
Byval uMsg As uint,_
Byval wParam As WPARAM,_
Byval lParam As LPARAM) As LRESULT
Dim hDC As HDC
Dim ps As PAINTSTRUCT
Static hWndCam As HWND
Select Case uMsg
Case WM_CREATE
hWndCam = capCreateCaptureWindow ("CapCam", WS_CHILD Or WS_VISIBLE, _
15, 40, 320, 240, hWnd, 500)
If hWndCam = 0 Then
MessageBox (hWnd, "keine Webcam gefunden ..", "Fehler", MB_ICONERROR)
DestroyWindow (hWnd)
Return 0
End If
capDriverConnect (hWndCam, 0)
capPreview (hWndCam, 0) 'Vorschau deaktivieren
SetTimer (hWnd, ID_TIMER, 1000, NULL)
Return 0
Case WM_COMMAND
Return 0
Case WM_PAINT
hDC = BeginPaint (hWnd, @ps)
EndPaint (hWnd, @ps)
Return 0
Case WM_TIMER
capGrabFrame (hWndCam) 'Einzelbild anzeigen
capEditCopy(hWndCam)......'ins Clipboard
Return 0
Case WM_CLOSE
'Beim Beenden muss die WebCam wieder freigegeben werden!
capDriverDisconnect (hWndCam)
KillTimer( hWnd, ID_TIMER )
DestroyWindow (hWnd)
Case WM_DESTROY
PostQuitMessage (NULL)
Return 0
Case Else
Return DefWindowProc (hWnd, uMsg, wParam, lParam)
End Select
End Function
Function WinMain (Byval hInstance As HINSTANCE,_
Byval hPrevInstance As HINSTANCE,_
Byval lpCmdLine As LPSTR,_
Byval nCmdShow As Integer) As Integer
Dim hWnd As HWND
Dim wMsg As MSG
Dim wcx As WNDCLASSEX
Dim className As String = "webcam_class"
'WNDCLASSEX structure
With wcx
.cbSize = Sizeof (WNDCLASSEX)
.style = CS_HREDRAW Or CS_VREDRAW Or CS_BYTEALIGNWINDOW
.lpfnWndProc = cast (WNDPROC, @WindowProc)
.cbClsExtra = NULL
.cbWndExtra = NULL
.hInstance = hInstance
.hbrBackground = CPtr( HGDIOBJ, COLOR_BACKGROUND )
.lpszMenuName = NULL
.lpszClassName = Strptr (className)
.hIcon = LoadIcon (NULL, IDI_APPLICATION)
.hCursor = LoadCursor (NULL, IDC_ARROW)
.hIconSm = 0
End With
RegisterClassEx (@wcx)
hWnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW,_
Strptr (className), "Webcam Beispiel",_
WS_OVERLAPPEDWINDOW,_
CW_USEDEFAULT, CW_USEDEFAULT, 360, 320,_
NULL, NULL,_
hInstance, NULL)
ShowWindow (hWnd, SW_SHOWNORMAL)
UpdateWindow (hWnd)
Do Until (GetMessage (@wMsg, NULL, 0, 0) = 0)
TranslateMessage (@wMsg)
DispatchMessage (@wMsg)
Loop
Return wMsg.wParam
End Function
'Entry point
End WinMain (GetModuleHandle (NULL), NULL, Command$, SW_NORMAL)
| Wenn das Prog läuft, starte die Example.exe (in der neuen zip -> Zeig_Clipboard.exe), da siehst du dann die Bilder aus dem Clipboard.
Wie die TIMER-Geschichte hier läuft siehst du aus dem Listing.
Gruß Volta
EDIT/ hier als zip (65KB) _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
pebisoft gesperrt
Anmeldungsdatum: 28.11.2004 Beiträge: 131
|
Verfasst am: 06.10.2006, 09:29 Titel: |
|
|
hallo volta, das war es, der "timer", vielen dank!
jetzt kann ich die funkbilder von meinem roboter sehen und mit dem screenprogram ein bild auswerten mit pixelauswertung nach evtl. hindernissen.
wo kann man eigentlich diese "Case WM_TIMER" ..."Case..." usw nachlesen.
wieviel "Case" gibt es, welches brauche ich für welchen zweck.
gibt es für diese spezis ein tut.
wäre ein weiterer schritt für das freebasic....es wird immer interessanter.
ich hatte im anderen thread mal gefragt, ob eigentlich die beiden fenster miteinander kommunizieren können, so ungefähr : windowfenster , schick mir jetzt ein bild in die ablage, damit ich(screenprogramm )das jetzt lesen kann und andersherum auch das kommunizieren.
wo gibt es eigentlich die "'$Include once: "kernel32.bi"?
mfg |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 06.10.2006, 12:17 Titel: |
|
|
Zitat: | wo kann man eigentlich diese "Case WM_TIMER" ..."Case..." usw nachlesen.
wieviel "Case" gibt es, welches brauche ich für welchen zweck.
gibt es für diese spezis ein tut. : | Was es mit dem Messages aufsich hat :
http://www.deinmeister.de/w32asm2.htm#messages
siehe in der FBVerzeichnis/inc/win/winuser.bi jede Menge WM_...
Zitat: | ich hatte im anderen thread mal gefragt, ob eigentlich die beiden fenster miteinander kommunizieren können, so ungefähr : windowfenster , schick mir jetzt ein bild in die ablage, damit ich(screenprogramm )das jetzt lesen kann und andersherum auch das kommunizieren. | siehe oben, zB. über eine Message, es gibt aber (wie immer in WinAPI) noch andere Möglichkeiten...
Zitat: | wo gibt es eigentlich die "'$Include once: "kernel32.bi"? | gibt es nicht (nicht mehr), mit #Include once: "windows.bi" werden alle Functions der kernel32.dll eingebunden.
('$Include once: <- veraltet nicht mehr verwenden, nur noch -> #Include once:)
Internet Suchdienst VOLTA'X GmbH & Co KG
Aufträge von Privatpatienten werden nach HOAI abgerechnet,
Kassenpatienten googlen selber. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 06.10.2006, 14:11 Titel: |
|
|
volta hat Folgendes geschrieben: | Internet Suchdienst VOLTA'X GmbH & Co KG
Aufträge von Privatpatienten werden nach HOAI abgerechnet,
Kassenpatienten googlen selber. |
Ilmt
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|