Domanda

problema

Windows Mobile / DirectDraw: flusso video Ruota

Il video anteprima funziona, tutto quello che ho bisogno ora è un modo per ruotare l'immagine. Credo che l'unico modo per gestire questa situazione è quello di scrivere un filtro personalizzato in base a CTransformFilter che ruotare l'immagine della fotocamera per voi. Se mi potete aiutare a risolvere questo problema, per esempio da me contribuendo a sviluppare questo filtro con la mia conoscenza DirectDraw limitata, la generosità è tua.

Sfondo / domanda precedente

Sono attualmente in sviluppo di un'applicazione per un dispositivo mobile (HTC HD2, Windows Mobile 6). Una delle cose che il programma ha bisogno di fare è di scattare foto utilizzando la fotocamera integrata. In precedenza ho fatto con la CameraCaptureDialog offerto da Windows Mobile 6 SDK, ma il nostro cliente vuole una soluzione più facile da usare.

L'idea è quella di vedere in anteprima flusso video della telecamera in un controllo e scattare una foto ad alta risoluzione (> = 2 megapixel) utilizzando la funzione foto della fotocamera, quando il controllo viene cliccato. Abbiamo fatto qualche ricerca sul tema e abbiamo trovato il modo migliore per ottenere questo risultato sembra essere utilizzando Direct Draw.

Gli svantaggi sono che non ho mai usato davvero qualsiasi Windows API nativa e che il mio C ++ è piuttosto male. In aggiunta a questo ho letto da qualche parte che il supporto Direct Draw di telefoni HTC è particolarità male e si dovrà utilizzare senza documenti librerie native HTC chiamate per scattare foto di alta qualità.

La buona notizia è che una società ci ha offerto di sviluppare un controllo che soddisfi le specifiche di cui sopra. Hanno stimato che sarebbe prendere loro circa 10 giorni, che portano alla discussione se potessimo sviluppare questo noi stessi a controllare entro un ragionevole lasso di tempo.

E 'ora il mio lavoro per la ricerca, che alternativa è meglio. Inutile dire che è troppo meno tempo per studiare l'intero architettura sviluppare una demo, che mi ha portato alle seguenti domande:

Domande non è più rilevante!

  • Fa qualcuno di voi ha esperienza con progetti simili? Quali sono i vostri suggerimenti?
  • C'è un buon esempio di codice sorgente di Direct Draw che si occupa di video in anteprima e cattura immagine?
È stato utile?

Soluzione

Beh, se si guarda il campione EZRGB24 si ottiene le basi di un semplice video trasformano filtro.

Ci sono 2 cose che devi fare per il campione per arrivare a fare quello che vuoi.

1) È necessario copiare x, y di y, x.
2) Dovete dire il campione dei media che il campione è ora altezza x larghezza, invece di larghezza x altezza.

Si tenga presente che l'immagine finale avrà esattamente lo stesso numero di pixel.

Per risolvere 1 è relativamente semplice. È possibile calcolare la posizione di un pixel facendo "x + (y * larghezza)". Quindi, fate un passo attraverso ogni x e y calcolare la posizione in quel modo e poi scrive a "y + (x * altezza)". Ciò trasporre l'immagine. Naturalmente senza Step2 questo sarà completamente sbagliato.

Per risolvere 2 è necessario per ottenere l'AM_MEDIA_TYPE del campione di ingresso. È quindi necessario scoprire che cosa la formatType è (Probabilmente FormatType_VideoInfo o FormatType_VideoInfo2). È possibile quindi lanciare il membro pbFormat di AM_MEDIA_TYPE, o un VIDEOINFOHEADER o un VIDEOINFOHEADER2 (A seconda del FormatType). È necessario ora impostare VIDEOINFOHEADER [2] :: bmiHeader.biWidth e biHeight al biHeight e biWidth (rispettivamente) del campione mezzi di ingresso. Tutto il resto dovrebbe essere lo stesso del AM_MEDIA_TYPE di ingresso.

Mi auguro che aiuta un po '.

Altri suggerimenti

Questa domanda href="https://stackoverflow.com/questions/1944032/capture-camera-stream-to-screen"> vi aiuterà a ottenere alcuni dettagli su DirectDraw. Ho fatto qualche ricerca su questo qualche tempo fa e la migliore che ho trovato è stato questo blog posta (citato anche nella domanda di cui sopra). Il post presenta un'estensione del campione CameraCapture nel SDK.

Tuttavia, non si hanno grandi aspettative. Sembra che l'anteprima e la foto scattata funzioneranno solo in piccola risoluzione. Anche se DirectDraw fa descrivere un modo di configurare la risoluzione , non v'è alcuna garanzia che questo sarà attuato correttamente dal driver.

Quindi dalla mia esperienza ciò che avete letto è vero. L'unico modo per farlo è quello di utilizzare i driver HTC. Quindi, se non si vuole spendere interminabili giorni in reverse engineering per un risultato dubbio, lasciare che qualcun altro fare il lavoro per voi. Se si vuole dare un colpo, prova a xda-developers forum .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top