|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
assemblage .net aforge : conversion vers windev |
Débuté par BBF, 16 mai 2014 14:26 - 17 réponses |
| |
| | | |
|
| |
Membre enregistré 148 messages Popularité : +3 (3 votes) |
|
Posté le 16 mai 2014 - 14:26 |
bonjour suite à un lien fourni par Jurrasic Pork je m'attèle à utiliser l'assemblage .net aforge. j'ai intégré les assemblages. àsavoir AForge.Video AForge.Video.DirectShow AForge.Controls
j'ai posé sur une fenêtre un contrôle dotnet en faisant référence au control video aforge.controls.videosourceplayer
videoDevices est un FilterInfoCollection(FilterCategory::VideoInputDevice) ListeSupprimeTout(COMBO_test) SI videoDevices:Count > 0 ALORS POUR I=1 _A_ videoDevices:Count ListeAjoute(COMBO_test, videoDevices:get_Item(I-1):Name) FIN FIN permet de lister les webcams dans une combo.
voici un exemple en vb.net
Dim VideoCaptureSource As VideoCaptureDevice Dim VideoDevices As New FilterInfoCollection(FilterCategory.VideoInputDevice) VideoCaptureSource = New VideoCaptureDevice(VideoDevices(COMBO_test.SelectedIndex).MonikerString)
c'est précisément cette dernière ligne que je tente de traduire.
j'ai fait un tout bête :
VideoDevices est un FilterInfoCollection(FilterCategory::VideoInputDevice) Videocapturesource est un VideoCaptureDevice(COMBO_test..ValeurAffichée)
qui ne bug pas, mais une fois que j'ai fait le start via
DOTNET_VideoSourcePlayer.VideoSource = Videocapturesource DOTNET_VideoSourcePlayer.Start()
m'affiche dans le contrôle DOTNET, le message suivant : "Video was stopped"
Je me doute que j'utilise très mal l'assemblage. Mais si toutefois qqun pouvait m'aiguiller, ca serait sympa merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 17 mai 2014 - 00:25 |
hello BBF, effectivement avec le contrôle VideoSourcePlayer de AFORGE on peut visualiser la vidéo d'une webcam dans un contrôle dotnet windev mais attention, le son n'est pas géré. Concernant ton problème tu n'étais pas loin de la vérité mais pour videocapturesource tu utilisais la propriété Name alors qu'il faut utiliser la propriété MonikerString. Cela ne suffisait pas car au lieu d'avoir Video was stopped tu aurais eu connecting... mais pas d'image. Il faut rajouter des dll AForge pour enlever ce problème. En résumé pour que cela marche voici ce qu'il faut faire : Ajouter les assemblages AForge, AForge.Controls, AForge.Imaging, AForge.Imaging.Formats, AForge.Video, AForge.Video.DirectShow Ajouter dans sa fenêtre un champ dotnet [B]DOTNET_VideoSourcePlayer[/B] avec comme classe le contrôle VideoSourcePlayer. Passer la ligne suivante dans le code d'initialisation du projet plutôt que l'initialisation de la combo :
videoDevices est un FilterInfoCollection(FilterCategory::VideoInputDevice)
le code d'initialisation de la combo :
ListeSupprimeTout(MoiMême) SI videoDevices:Count > 0 ALORS POUR I=1 _A_videoDevices:Count ListeAjoute(MoiMême, videoDevices:get_Item(I-1):Name) FIN FIN
le code de Sélection de ligne de la Combo :
ChaineMoniker est une chaîne = videoDevices:get_Item(MoiMême-1):MonikerString Videocapturesource est un VideoCaptureDevice(ChaineMoniker ) DOTNET_VideoSourcePlayer.VideoSource = Videocapturesource DOTNET_VideoSourcePlayer.Start()
Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 148 messages Popularité : +3 (3 votes) |
|
Posté le 19 mai 2014 - 08:10 |
Bonjour
et merci pour le coup de main.
Jurassic Pork a écrit : > avec le contrôle VideoSourcePlayer de AFORGE on peut visualiser la vidéo d'une webcam dans un contrôle dotnet windev mais attention, le son > n'est pas géré.
mince, ça ne m'arrange pas. je cherche justement un moyen de sélectionner une webcam, puis de visionner, enregistrer la vidéo avec le son.
à ton avis, y a t'il un moyen de l'avoir ? peut etre en combinant aforge pour la selection et l'usage de ton composant pour lire et enregistrer la webcam ?
ps : sans passer par l'exemple fourni par pcsoft, qui ne permet pas la sélection et qui de toute facon ne fonctionne pas sur tous les pcs. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 19 mai 2014 - 13:50 |
hello, oui en fait le mieux c'est de combiner mon exemple de la classe clibvlc et l'assemblage AForge.Video.directshow pour la sélection de la webcam. Surtout que l'exemple possède déjà de quoi enregistrer la video ( en wmv sinon il faut régler les paramètres dans options). La modification pour le démarrage de la webcam serait du genre :
LesOptions est une chaîne = EOT
Multitâche(10) oVLC:StopPlay() oVLC:PlaylistClear() LesOptions = ":dshow-vdev=" + Combo[Combo] + TAB + ":dshow-adev=" + Combo[Combo]
oVLC:AddLocation("dshow://",LesOptions) oVLC:SetHWND(Handle(IMG_Vidéo)) oVLC:Play() oVLC:PositionSet(0)
Attention utiliser AddTarget ou AddLocation suivant la version de vlc et la classe que tu utilises.
Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 07 octobre 2014 - 17:07 |
Bonjour,
J'aimerais faire pour le moment une simple capture d'image ou un enregistrement d'une vidéo à partir d'une webCam d'une tablette (soit celle de devant soit celle de derrière)
J'ai d'abord utilisé le champ caméra et Videocapture mais je rencontre plusieurs : - si utilisation de directshow => je ne peut pas choisir ma caméra et l'enregistrement d'une vidéo ne fonctionne pas - si utilisation les API 'Video for Windows' => j'ai le message d'erreur "erreur de l'API vidéo lors de l'appel à la fonction '?????'"
Donc je me suis penché sur l'assemblage AForge mais je rencontre déjà des difficultés sur la capture d'image Dans les forums j'ai vu le code suivant :
private void button1_Click(object sender, EventArgs e) { cam = new VideoCaptureDevice(webcam[comboBox1.SelectedIndex].MonikerString); cam.NewFrame += new NewFrameEventHandler(cam_NewFrame); cam.Start(); } void cam_NewFrame(object sender, NewFrameEventArgs eventArgs) { bitmap = (Bitmap)eventArgs.Frame.Clone(); pictureBox1.Image = bitmap; } private void pictureBox1_Click(object sender, EventArgs e) { pictureBox1.Image = bitmap; } Mais je bloque sur la traduction en WinDev de cam.NewFrame += new NewFrameEventHandler(cam_NewFrame);
je l'ai traduite par : cam.NewFrame += DotNetDélégué("gf_Capture","VideoSourcePlayer.NewFrameHandler")
mais j'ai le message suivant : L'objet de type <WL.CWLDelegate_void_VideoSourcePlayer_NewFrameHandler_object_System_Drawing_Bitmap&> (assemblage <D:\Développement\Sources\Mes Projets\Camera\Exe\TestAForge.dll>) n'a pas pu être créé
Merci de votre aide |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 283 messages Popularité : +3 (3 votes) |
|
Posté le 10 octobre 2014 - 09:45 |
Bonjour,
Depuis la découverte de cette conversation, ça fait plus d'une semaine que je me suis penché sur l'assemblage AForge.
Pourquoi ? Parce que, avec les fonctions WD Vidéoxxx() il n'est pas possible d'avoir le "nom" des caméras mais seulement un "nom de driver". Proposer à un utilisateur de choisir une caméra d'après un driver tel que "Microsoft WDM Image Capture (Win32)" ça ne fait pas très pro !!! Après moultes recherches, j'ai trouvé un code VB6 qui peut aider à récupérer les noms : https://social.msdn.microsoft.com/Forums/vstudio/en-US/c4fd12d8-2870-47ed-8f2e-3dc613afeb6f/selecting-a-particular-webcam… C'est parce que ça fait un peu "bricolo" que je me suis tourné vers l'assemblage AForge.
Ton problème : cam.NewFrame += new NewFrameEventHandler(cam_NewFrame); traduite par : cam.NewFrame += DotNetDélégué("gf_Capture","VideoSourcePlayer.NewFrameHandler")
D'après la doc, l'évènement est déclenché A CHAQUE IMAGE de la vidéo pour ajouter un sous-titrage, par exemple, à la vidéo.
Pour prendre UNE SEULE PHOTO (snapshot) il existe une méthode : AForge.Controls.VideoSourcePlayer.GetCurrentVideoFrame()
Ce que j'ai fait avec un champ .NET appelé DOTNET_VideoSourcePlayer : (352, 288) c'est la taille de la photo à connaître à l'avance. clImgbitmap est System.Drawing.Bitmap(DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288) clImgbitmap contient l'image. Pour l'enregistrer, méthode SAVE() de Bitmap : clImgbitmap.Save("C:\Users\admin\temp\MaphotoNET.jpg", system.Drawing.Imaging.ImageFormat.Jpeg)
2 choses m'em...bêtent : 1 ) Je ne sais pas et je ne suis pas arrivé à déclarer clImgbitmap isolé à part (donc impossible de faire une boucle pour plusieurs caméras à cause de la REdéclaration de l'objet Bitmap clImgbitmap , [pas testé non plus]) 2 ) Je ne sais pas et je ne suis pas arrivé à récupérer l'objet Bitmap clImgbitmap pour le copier dans une variable WD Image ou dans un champ WD Image (donc obligé d'utiliser la méthode SAVE() de Bitmap et du taf en sus si on veut gérer la qualité JPG par exemple)
Si tu as des soluces pour moi sur ces 2 problèmes... Merci. J'espère que mon VideoSourcePlayer.GetCurrentVideoFrame() te fera avancer.
Jurassic Pork, si tu passes par ici et que tu ais un commentaire à faire, merci aussi (je sais que tu es balaise dans les proc "bas niveau" et autres API.
Bon dev à tous et A+ Tony |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 10 octobre 2014 - 11:02 |
hello tony, avec ça tu devrais t'en sortir :
clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288)
dcimg est un entier = dDébutDessin(IMG_CaptureVideo) hdcCompatible est un entier = API("gdi32","CreateCompatibleDC",dcimg) API("gdi32","SelectObject",hdcCompatible,clImgbitmap.GetHBitmap())
API("gdi32","BitBlt",dcimg,0,0,352,288,hdcCompatible,0,0,0x00CC0020)
API("user32","InvalidateRgn",Handle(IMG_CaptureVideo),0,True)
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Posté le 11 octobre 2014 - 12:03 |
Bonjour J.P.
Merci beaucoup. Ton code est "nickel-chrome" et marche très bien.
Entre-temps j'ai trouvé un code source qui fait la même chose sans API (à première vue). Je l'ai adapté au WL : voir plus loin le résultat, ça peut servir à d'autres personnes.
Le top serait de pouvoir récupérer directement l'image (frame) à partir du "Videocapturesource" sans avoir le champ .NET d'affichage (DOTNET_VideoSourcePlayer). Question d'alléger le prog et peut-être de l'utiliser en "service windows" ou dans des threads (pas de fenêtres), etc...
Mais là, je pense qu'on retombe sur le problème de Mick85 : cam.NewFrame += new NewFrameEventHandler(cam_NewFrame); cam.NewFrame += DotNetDélégué("gf_Capture","VideoSourcePlayer.NewFrameHandler")
Bon, ci-dessous mon nouveau code :
taille_TableauBytes est un entier TableauBytes est tableau d'entiers sans signe sur 1 BufferBytes est Buffer VariableImgageWD est WL.Image MemStream est MemoryStream()
clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288)
clImgbitmap.Save(MemStream, ImageFormat.Bmp) TableauBytes = MemStream.ToArray()
taille_TableauBytes = Dimension(TableauBytes)
BufferBytes = Complete(BufferBytes, taille_TableauBytes, Caract(0)) Transfert(&BufferBytes,&TableauBytes, taille_TableauBytes)
VariableImgageWD = BufferBytes
SI VariableImgageWD.Valide ALORS IMG_CaptureVideo = VariableImgageWD FIN
Bon dev et A+ Tony |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 283 messages Popularité : +3 (3 votes) |
|
Posté le 14 octobre 2014 - 17:06 |
Bonjour,
Pour ceux qui sont intéressés, j'ai modifié légèrement mon dernier code (basé sur celui de Jurassic Pork) car j'ai eu des erreurs d'exception. En effet, "DOTNET_VideoSourcePlayer.GetCurrentVideoFrame()" renvoie parfois un NULL s'il n'arrive pas à "capturer" une image. Le NULL affecté à "clImgbitmap" (qui est un "System.Drawing.Bitmap dynamique") génère l'exception. Donc à la place de :
clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288) J'ai maintenant :
NbreFois est entier objBitmap est un Variant = Null TANTQUE objBitmap = Null ET NbreFois < 10 NbreFois++ Multitâche(-10) objBitmap = DOTNET_VideoSourcePlayer:GetCurrentVideoFrame() FIN SI objBitmap <> Null ALORS clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(objBitmap, 352, 288)
FIN Bon dev et A+ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 283 messages Popularité : +3 (3 votes) |
|
Posté le 14 octobre 2014 - 18:55 |
Re-bonjour,
Au final je me suis penché sur la possibilité de récupérer une image sans avoir une zone d'affichage (sans champ DOTNET). L'idée est de récupérer le "Bitmap" généré après le déclenchement de l'événement "NewFrame" (pour chaque image de la caméra). A l'inverse de Mick85 (voir son post plus haut) je n'ai aucune erreur, tous mes codes de mise en place de l'événement passent bien mais...... Ma procédure callback n'est jamais appelée !!! J'ai cherché du côté du "DotNetDélégué" et des "delegate" en C# (que je ne connais pas) mais je n'ai pas trouvé mon bonheur. Peut-être y a t-il une propriété pour "démarrer" l'événement mais je ne vois pas laquelle.
Je mets le code simplifié ci-dessous. Si quelqu'un peut m'aiguiller... Merci (Je pense fortement à toi Jurassic Pork qui semble bien connaître l'assemblage "Aforge").
VideoDevices est un FilterInfoCollection(FilterCategory::VideoInputDevice) VideoSource est un VideoCaptureDevice
SI VideoDevices:Count < 1 ALORSRETOUR
VideoSource:Source = VideoDevices:get_Item(0):MonikerString DOTNET_VideoSourcePlayer:VideoSource = VideoSource
VideoSource:add_NewFrame(DotNetDélégué("Proc_traiter_IMG", "NewFrameEventHandler")) VideoSource:NewFrame += DotNetDélégué("Proc_traiter_IMG", "NewFrameEventHandler") DOTNET_VideoSourcePlayer:add_NewFrame(DotNetDélégué("Proc_traiter_IMG", "NewFrameEventHandler")) DOTNET_VideoSourcePlayer:newframe += DotNetDélégué("Proc_traiter_IMG", "NewFrameEventHandler")
clEventHandler est un NewFrameEventHandler dynamique clEventHandler = DotNetDélégué("Proc_traiter_IMG", "NewFrameEventHandler") VideoSource:add_NewFrame(clEventHandler)
VideoSource:Start() Bon dev à tous et A+ Tony |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 17 octobre 2014 - 01:01 |
hello Tony, je crois que ton problème est peut-être dû au fait que ta procédure Proc_traiter_IMG est locale ? Moi j'avais le même problème que Mick85 c'est à dire l'erreur :
L'objet de type <WL.CWLDelegate_void_VideoSourcePlayer_NewFrameHandler_object_System_Drawing_Bitmap&> (assemblage <D:\Développement\Sources\Mes Projets\Camera\Exe\TestAForge.dll>) n'a pas pu être créé quand je lançais l'appli en mode debug (WDTest) . Quand je lance l'exécutable directement je n'ai pas ce problème. Je ne suis pas du tout certain que ta routine sans utilisation des api windows soit plus performante. Je ne peux pas la tester car je suis en WD16 et je n'ai pas de variable image. Il faudrait que tu compares les performances avec l'analyseur de performance. Finalement j'arrive au code suivant : code du projet (Initialisation) :
Videocapturesource est un VideoCaptureDevice videoDevices est un FilterInfoCollection(FilterCategory::VideoInputDevice) CaptureActivée est un booléen = Faux
Procédure globale Proc_Traiter_IMG
Procedure Proc_Traiter_IMG(sender,trame) SI PAS CaptureActivée ALORS RETOUR Trace("Nouvelle Capture") clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(Fenêtre1.DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288)
dcimg est un entier = dDébutDessin(Fenêtre1.IMG_CaptureVideo) hdcCompatible est un entier = API("gdi32","CreateCompatibleDC",dcimg) API("gdi32","SelectObject",hdcCompatible,clImgbitmap.GetHBitmap())
API("gdi32","BitBlt",dcimg,0,0,352,288,hdcCompatible,0,0,0x00CC0020)
API("user32","InvalidateRgn",Handle(Fenêtre1.IMG_CaptureVideo),0,True) Libérer clImgbitmap CaptureActivée = Faux
Initialisation de la combo de choix de webcam :
ListeSupprimeTout(MoiMême) SI videoDevices:Count > 0 ALORS POUR I=1 _A_ videoDevices:Count ListeAjoute(MoiMême, videoDevices:get_Item(I-1):Name) FIN FIN
Sélection d'une ligne de la combo :
SI DOTNET_VideoSourcePlayer.IsRunning ALORS DOTNET_VideoSourcePlayer.Stop() ChaineMoniker est une chaîne = videoDevices:get_Item(MoiMême-1):MonikerString Videocapturesource:Source = ChaineMoniker DOTNET_VideoSourcePlayer.VideoSource = Videocapturesource Videocapturesource:add_NewFrame(DotNetDélégué("Proc_Traiter_IMG", "NewFrameEventHandler")) DOTNET_VideoSourcePlayer.Start()
et pour le bouton qui lance la capture tout simplement :
CaptureActivée = Vrai
Le principe : Dès que l'on démarre la source vidéo les événements NewFrame arrivent mais dans la routine de traitement on ne fait rien (retour immédiat) car la variable CaptureActivée est à faux. Quand on appuie sur le bouton de capture on déroule le traitement qui transfert la trame vidéo vers le champ image et à la fin on remet CaptureActivée à faux pour éviter de nouvelles captures.
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 283 messages Popularité : +3 (3 votes) |
|
Posté le 18 octobre 2014 - 15:43 |
Mon cher ami Jurassic Pork (si je puis me permettre)
Merci mille fois, ça marche !!!
Mon problème ne venait pas de ce que la procédure "Proc_traiter_IMG" était locale ou pas mais parce que je lançais le debug (WDTest) sur une fenêtre isolée. En la mettant en "Première fenêtre du projet" et en lançant le projet complet c'est OKayyyyyyyy. Je peux désormais récupérer une image sans avoir besoin du champ d'affichage "DOTNET_VideoSourcePlayer". En ce qui concerne les performances en utilisant ou pas les API c'est insignifiant car il me semble que c'est presque instantané donc je ne vais pas faire des tests pour gagner quelques millisecondes.
Encore merci, je ne sais pas si je serais arrivé sans toi.
Bon dev à tous et A+ |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 5 messages |
|
Posté le 20 octobre 2014 - 10:13 |
bonjour, Tout d'abord merci à Toni et à Jurassic Pork pour vos réponses et je suis désolé de ne pas avoir donné de nouvelles plus tôt. Pour ma part et pour une question de répondre rapidement au besoin de mon client, j'ai gardé le champ caméra (DirectShow), et par chance la caméra par défaut est celle de derrière ce qui lui convient (pour le moment). En ce qui concerne la prise de vidéo, cela ne lui convenait pas non plus car les vidéos sont au format AVI et sont trop grosses.
Je vais étudié attentivement vos réponses et adapté mon programme.
Encore merci, |
| |
| |
| | | |
|
| | |
| |
Posté le 24 février 2016 - 09:45 |
Bonjour à vous 2 et merci de partager vos trouvailles. Suite à des soucis avec le champ Camera et Windows 10, j'ai regardé de près ce sujet et malheureusement je n'arrive pas à avoir l'image de la webcam. Pour résumé, j'ai créé un projet avec un fenêtre en Windev 20 qui doit tourner sur des tablettes PC en Windows 10 (pas en mode Windows App Store). Avec le champ Camera de Windev, l'application plante alors qu'en Windows 8 ca marchait. L'application doit afficher l'apercu de la webcam en vidéo et prendre une photo lors de l'appui sur un bouton.
Dans un nouveau projet, j'ai ajouté les assemblages .NET : Aforge, AForge.Controls, AForge.Imaging, AForge.Imaging.Formats, AForge.Video et AForge.Video.DirectShow (versions à jour du site AForge). J'ai mis le code suivant dans l'initialisation du projet :
videoDevices est un FilterInfoCollection(FilterCategory::VideoInputDevice) Dans une nouvelle fenêtre, j'ai ajouté une liste déroulante "COMBO_Source" pour sélectionner la caméra (la tablette possède 2 caméras : façade et dos). J'ai mis le code suivant dans l'initialisation de la liste déroulante :
ListeSupprimeTout(MoiMême) SI videoDevices:Count > 0 ALORS POUR I=1 _A_ videoDevices:Count ListeAjoute(MoiMême, videoDevices:get_Item(I-1):Name) FIN FIN J'ai mis le code suivant dans sélection d'une ligne de la liste déroulante :
ChaineMoniker est une chaîne = videoDevices:get_Item(MoiMême-1):MonikerString Videocapturesource est un VideoCaptureDevice(ChaineMoniker ) DOTNET_VideoSourcePlayer.VideoSource = Videocapturesource DOTNET_VideoSourcePlayer.Start() J'ai ajouté dans la fenêtre un champ .NET appelé "DOTNET_VideoSourcePlayer" dans la fenêtre. Ce champ est lié à la classe .NET "AForge.Controls.VideoSourcePlayer". Lorsque je lance l'executable, je sélectionne la caméra dans la liste déroulante et le champ .NET affiche "Connecting..." et l'image reste grise. Ou me suis-je trompé ? Merci d'avance |
| |
| |
| | | |
|
| | |
| |
Posté le 24 novembre 2016 - 08:54 |
bonjour
nous avons réussi à palier ce problème en compilant en 64 bits et en mettant les DLL AFORGE dans le rep exe
par contre on a pas encore trouvé comment pivoter l'image de la webcam ... |
| |
| |
| | | |
|
| | |
| |
Posté le 12 juillet 2019 - 10:58 |
// J.P Octobre 2014 clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288) // clImgbitmap contient l'image // IMG_CaptureVideo est un champ image dcimg est un entier = dDébutDessin(IMG_CaptureVideo) hdcCompatible est un entier = API("gdi32","CreateCompatibleDC",dcimg) API("gdi32","SelectObject",hdcCompatible,clImgbitmap.GetHBitmap()) // pour copier le bitmap du champ dotnet video vers le champ image API("gdi32","BitBlt",dcimg,0,0,352,288,hdcCompatible,0,0,0x00CC0020) // pour rafraîchir le champ image API("user32","InvalidateRgn",Handle(IMG_CaptureVideo),0,True) //// Message d'erreur :
'invocation de la méthode <GetCurrentVideoFrame()> du type <Bitmap> a échoué Le framework .NET a renvoyé l'erreur suivante : Impossible de charger le fichier ou l'assembly 'AForge, Version=2.2.5.0, Culture=neutral, PublicKeyToken=c1db6ff4eaa06aeb' ou une de ses dépendances. Le fichier spécifié est introuvable. j'ai utilise Win7 framework 4.6.1 32 bits |
| |
| |
| | | |
|
| | |
| |
Posté le 14 juillet 2019 - 12:39 |
j'ai besoin Code reconnaissance Faciale avec Windev |
| |
| |
| | | |
|
| | |
| |
Posté le 09 août 2019 - 03:56 |
Thank all thé gentlemen and especially Jurassic Pork about all how to integrate the external API and deal with .NET Technology on This Powerful Tool PC-SOFT WIndev SO ... now I am Trying to work on EmguCV with WIndev and I explorer in this forum in past . how to display a Picture Bitmap in Image Windev Control (Champ Image WIndev) ... and I see its so Hard to make this properly and many problems appear like Memory Leak with SelectObject Method in DLL gdi32 ...
clImgbitmap est un System.Drawing.Bitmap dynamique clImgbitmap = allouer un "System.Drawing.Bitmap"(DOTNET_VideoSourcePlayer.GetCurrentVideoFrame(), 352, 288)
dcimg est un entier = dDébutDessin(IMG_CaptureVideo) hdcCompatible est un entier = API("gdi32","CreateCompatibleDC",dcimg) API("gdi32","SelectObject",hdcCompatible,clImgbitmap.GetHBitmap())
API("gdi32","BitBlt",dcimg,0,0,352,288,hdcCompatible,0,0,0x00CC0020)
API("user32","InvalidateRgn",Handle(IMG_CaptureVideo),0,True) SO ... the question why not use the .NET Controler (Champ .NET) and Select System.Windows.Forms and use the PicterBox controler instead to use all code about API and DLL to only Draw the Picture .... Thank you so mutch |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|