# Driver d´une web cam utilisant la mémoire partagée

## Principe
Programme
Lancement
Utilisation
Changement des paramètres du driver

# Principe

Capture d´une image affichée sur l´écran (comme celle d´ une webcam) en utilisant les fonctions windows:
hdcEcran = GetDC(NULL)
CreateCompatibleDC(hdcEcran);
hbitmap = CreateCompatibleBitmap(hdcEcran, Dim1, Dim1)
SelectObject(hdcMemory, hbitmap)
GetDIBits(hdcEcran, hbitmap, 0, (UINT)Dim1, lpBits, &bitmapinfo, DIB_RGB_COLORS)).
La taille Dim1 de l´image captée est quelconque, elle est réduite à une taille Dim2 <= 128 qui sera envoyée à anyflo via une mémoire partagée DA.
Pour une plus grande image utiliser la commande cap
Un spot (désignation sur l´image) est détecté et envoyé via le premier pixel de l´image transmise win,xc,yc

# Programme

## Source
Principaux paramètres

## Source

WebCam.c programme en C ouvrant deux mémoires partagées de noms:
DA de taille 4*128*128 octets (driver -> anyflo, recevant la capture et l´envoyant à anyflo) et
AD de taille 1024 octets (anyflo -> driver).

## Principaux paramètres

Test: 1 mode test, -1 silence.
Miror: 1 miroir, -1 de face.
Simple: 1 silple, -1 interpole.
Dimx1: largeur de l&aute;image captée.
Win: Dimy1=Dimx1/Win.
Dimy1: hauteur de l&aute;image captée.
Y0: ordonn&eacuye;e de l&aute;image captée.
Np1: nombre de pixels de l&aute;image captée.
Limit: 1 yes limite, -1 no limit.
Speed: 1 yes speed, -1 no speed.
Coe: dilitation de l´image transmise.
Pd_da: -> datas de l´image transmise.
Pf_da: -> float datas.
Np2: nombre de pixels de l&aute;image transmise.
: coté de l&aute;image transmise.
Dim_DA: dimension de la mémoire partagée DA.
X, Y: coordonnées du cursuer.
Radius: rayon.
Lum: lumnance du curseur.
Max: 3 * 255 * Lum.
P0,P1,P2 -> images.
Dim_CA: dimension de la mémoire partagée CA.
Pd_ca: -> datas datas de la mémoire CA.
Pf_ca: -> float data.
Pd_ad: -> datas AD
Pc_ad;: -> char datas.
Pf_ad: -> float AD
Dim_AD: dimension de la mémoire partagée AD.

# Lancement

WebCam.js fichier java script lançant le driver.
Options
dim=d: taille de l´image captée (384 par défaut), celle-ci est réduite à 128*128 pixels RGBA et envoyé à anyflo via la mémoire partagée DA.
help: imprime le help.
mir=m: 1 miroir (par défaut), -1 de face.
ori=Y0: origne en y (0 par défaut).
tes=t: 1 yes test , -1 no test (par défaut).
win=2: 2 fenêtres analysées Dimy1=Dimx1/2.

# Utilisation

Recouvrir complètement la fenêtre de saisie du driver par l´image de la caméra (convenablement redimensionnée et déplacée), en veillant à ce qu´aucun objet de luminance plus grande que coe n´apparaisse dans l´image (car il serait pris pour le curseur).
Dans anyflo, faire une seule fois:
`device(1)type("MEM")nom("DA")dim(128,128,3);` et
`device(1)type("MEM")nom("AD");`
ouvrant les mémémoire partagéees.
Puis, à chaque image:
`p=var device(1);` récupère l´image, p[0,2] contient:
flag=1: l´image a été complètement traitée.
x,y sont les coordonnées du cursuer (entre 0 et 127) qu´il convient de convertir en coordonnées de l´écran:
xe=Xe1+DX*x/Dim1;ye=-DY*y/Dim1-Ye1; avec:
DX,DY = dimensions de l´écran et Xe1=-DX/2.

## Changement des paramètres du driver

`var device(2)="?";` imprime les valeurs des paramètres.
`var device(2)="cap";` active/désactive la saisie d´une grande image, la communication avec anyflo est momentanément coupée et les images apparaissant dans le fenêtre de saisie sont automatiquement enregistrées dans les bitmaps d´une image 3D qui sera sauvée sou le nom Nam.ima (CAPTURE_0.ima par défaut)jusqu´à Nbi images (250 par défaut).
`var device(2)="nbi";` imprime Nbi.
`var device(2)="nbi=...";` pour changer Nbi.
`var device(2)="nam";` imprime Nam.
`var device(2)="nam=...";` pour changer Nam.
`var device(2)="cap=1";` : active.
`var device(2)="cap=-1";` : désactive.
`var device(2)="exit";` stoppe le driver.
`var device(2)="miror=m";` m = 1:image miroir (par défaut). m=-1 image non inversée.
`var device(2)="coe=c";` coefficient multiplicateur de l´image transmise.
`var device(2)="limit=c";` c = 1; couleurs limitées (par défaut), -1 non limitées.
`var device(2)="lum=c";` c = luminance minimum du spot de désignation (0.75 par défaut), celle ci doit être plus grande que celle de tous les objets vus.
`var device(2)="test=t";` t = 1: mode test (imprime des informations), t = -1 normal (par défaut).