Webcam: WIA e Avicap32

mercoledì 06 settembre 2006 - 04.42

danilocap Profilo | Newbie

Salve a tutti,
premettendo che è da poco che programmo in C# (anche se ho esperienza in C e altri linguaggi)
vi espongo il mio problema.
Sto cercando di realizzare una semplice applicazione che prenda una immagine dalla webcam,
la visualizzi in una pictureBox e la salvi in un file png.
Il problema non è tanto utilizzare la webcam (su internet, anche su questo sito, ci sono ottime
classi create per lo scopo) ma capire "cosa c'è dietro". Mi spiego meglio..
Vorrei sapere se c'è una documentazione riguardo la dll avicap32.dll (non ne ho trovata alcuna)
per capire cosa sono quelle strane variabili che si usano nel progetto (quello in questo sito, o qualunque altro che faccia uso di questa dll).
Ho scoperto inoltre che c'è una specie di linguaggio di scripting per dispositivi quali webcam,
scanner e altro. Il problema è che la documentazione sul sito msdn mi è sembrata un pò ostica..
Non ci ho capito niente.. non sono nemmeno riuscito a inizializzare la webcam.
Quel che cerco non sono classi già fatte, ma una documentazione su "come ha fatto l'autore
di tal classe a realizzarla".. non so se mi spiego..
spero che possiate aiutarmi, e scusate se sono stato poco chiaro ma 1) non è da molto che
programmo in c# e 2) sono 3 notti che non dormo per studiare il c# mi sta prendendo e,
davvero, quello che mi preme di più è "capire" come funzioni il linguaggio e le api di windows
(sono abituato a programmare su piattaforme unix/linux).
Mi scuso per la (inutile) lunghezza del thread e aspetto aiuti di ogni genere, anche dei
semplici link vanno bene

Brainkiller Profilo | Guru

>Sto cercando di realizzare una semplice applicazione che prenda
>una immagine dalla webcam,
>la visualizzi in una pictureBox e la salvi in un file png.

Nell'articolo su questo sito è indicato il fatto che l'API salva in BMP. Sta poi a te convertire in PNG. Con .NET però è una cosa molto semplice.

>classi create per lo scopo) ma capire "cosa c'è dietro". Mi spiego
>meglio vorrei sapere se c'è una documentazione riguardo la dll avicap32.dll

Vai a redmond alla Microsoft e te lo fai spiegare

>(non ne ho trovata alcuna)

In effetti spesso la documentazione Microsoft ha delle lacune.

>per capire cosa sono quelle strane variabili che si usano nel
>progetto (quello in questo sito, o qualunque altro che faccia
>uso di questa dll).

A che variabili ti riferisci ? Forse ti riferisci alle costanti ?

>su "come ha fatto l'autore
>di tal classe a realizzarla".. non so se mi spiego..

Il problema non si limita a una questione di tipo software ma anche hardware.

>2) sono 3 notti che non dormo per studiare
>il c# mi sta prendendo e, davvero, quello che mi preme di più è "capire" come funzioni
>il linguaggio e le api di windows

Il C# è una cosa, le API e tutto il subsystem Win32 di Windows è tutt'altra cosa. Anche se C# fa comunque uso intensivo di API di basso livello la differenza è che da .NET il tutto è agevolato visto che non vedi niente di ciò che avviene sotto, se programmassi la stessa cosa in C++ sarebbe decisamente più complesso e le notti in bianco passerebbero da 3 a 300

In ogni caso anche se come detto ci sono lacune, MSDN nel totale è abbastanza completa considerato che esistono anche aree come MSDN Magazine cone esempi più approfonditi e Technical Articles.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

danilocap Profilo | Newbie

Come temevo sono stato poco chiaro.. colpa del sonno
Cerco di spiegarmi meglio

>Nell'articolo su questo sito è indicato il fatto che l'API salva
>in BMP. Sta poi a te convertire in PNG. Con .NET però è una cosa
>molto semplice.

Questo ho già trovato come farlo, non l'avevo scritto

>>classi create per lo scopo) ma capire "cosa c'è dietro". Mi spiego
>>meglio vorrei sapere se c'è una documentazione riguardo la dll avicap32.dll
>
>Vai a redmond alla Microsoft e te lo fai spiegare

qui intendevo non proprio capire la roba a basso livello, ma ad esempio: se io volessi scrivere un programma e ci fosse già una dll in Windows che possa aiutarmi, come faccio a
saperlo? E c'è una documentazione riguardo questei? Anche solo l'equivalente degli header
in C, dove posso leggere qualcosa sull'uso delle funzioni e delle principali variabili.. non so se si capisce cosa intendo...
>>(non ne ho trovata alcuna)
>
>In effetti spesso la documentazione Microsoft ha delle lacune.
Spero di dovermi ricredere
>>per capire cosa sono quelle strane variabili che si usano nel
>>progetto (quello in questo sito, o qualunque altro che faccia
>>uso di questa dll).
>
>A che variabili ti riferisci ? Forse ti riferisci alle costanti
Qui mi riferivo alle queste strane variabili su cui non ho trovato nulla, ad esempio
public static short WM_CAP = 1024;
public static long WM_USER = 1024;

public static int WM_CAP_DRIVER_CONNECT = WM_CAP + 10;
public static int WM_CAP_DRIVER_DISCONNECT = WM_CAP + 11;
public static int WM_CAP_EDIT_COPY = WM_CAP + 30;
public static long WM_CAP_FILE_SAVEDIB = WM_USER + 25;
public static long WM_CAP_FILE_SAVEAS = WM_USER + 23;

>>su "come ha fatto l'autore
>>di tal classe a realizzarla".. non so se mi spiego..
>
>Il problema non si limita a una questione di tipo software ma
>anche hardware.
A me interessa, come ho già detto, sapere che se ho bisogno di una tal funzione, in topolino.dll questa esiste già, e sapere anche come fare ad usarla, argomenti, valori di ritorno ecc


Ora cerco di nuovo su MSDN e vediamo un pò cosa viene fuori.

Grazie ancora

Brainkiller Profilo | Guru

>qui intendevo non proprio capire la roba a basso livello, ma
>ad esempio: se io volessi scrivere un programma e ci fosse già
>una dll in Windows che possa aiutarmi, come faccio a
>saperlo?

Non c'è altro modo che studiando come funziona windows, le sue API, e sfogliando i vari SDK ed MSDN.

>l'equivalente degli header

Tutti gli header li trovi installato il Microsoft Visual C++ contenuto in VS.NET.

>public static short WM_CAP = 1024;
>public static long WM_USER = 1024;
>
>public static int WM_CAP_DRIVER_CONNECT = WM_CAP + 10;
>public static int WM_CAP_DRIVER_DISCONNECT = WM_CAP + 11;
>public static int WM_CAP_EDIT_COPY = WM_CAP + 30;
>public static long WM_CAP_FILE_SAVEDIB = WM_USER + 25;
>public static long WM_CAP_FILE_SAVEAS = WM_USER + 23;

Beh queste sono specificate di solito negli header files, e nella documentazione. Sono costanti, alla fine sono numeri interi. Spesso nella documentazione ci sono anche i significati delle varie costanti.

>Grazie ancora

Ok Ciao


David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5