Capturar um frame de video e salvar em BMP
29/06/2024
0
Olá, preciso capturar um frame de vídeo e salvar em BMP.
o vídeo poderá ser um MP4, AVI, MOV, MKV ou outra extensão.
eu teria que abrir o arquivo de vídeo, fazer um "TakeShot" de um frame e salvar em BMP
o mediaplayer do firemonkey só abre AVI então não dá pra usar ele.
Talvez teria que usar um componente externo, uma api do windows?
Alguém teria alguma ideia de como fazer isso?
o vídeo poderá ser um MP4, AVI, MOV, MKV ou outra extensão.
eu teria que abrir o arquivo de vídeo, fazer um "TakeShot" de um frame e salvar em BMP
o mediaplayer do firemonkey só abre AVI então não dá pra usar ele.
Talvez teria que usar um componente externo, uma api do windows?
Alguém teria alguma ideia de como fazer isso?
![Alberto Alberto](https://www.devmedia.com.br/imagens/fotoscolunistas/435345_20161220211317.jpg)
Alberto
Curtir tópico
+ 0
Responder
Posts
05/07/2024
Arthur Heinrich
Capturar um frame de um vídeo não é uma tarefa simples. Cada vídeo pode utilizar um CODEC diferente e a decodificação do arquivo nem sempre é simples.
Existem alguns componentes que fazem essa decodificação e, a cada frame decodificado, chamam uma rotina passando as informações da imagem. Se você utilizar um componente deste tipo, será mais fácil.
Uma alternativa seria tentar capturar o desktop onde o vídeo está sendo reproduzido. Você pode utilizar a rotina "getdc(0)", para capturar o device context do desktop e utilizar a rotina bitblt() para efetuar a cópia da imagem para o seu bitmap. Ao final, deve utilizar o "releasedc()" para liberar o device context.
Existem alguns componentes que fazem essa decodificação e, a cada frame decodificado, chamam uma rotina passando as informações da imagem. Se você utilizar um componente deste tipo, será mais fácil.
Uma alternativa seria tentar capturar o desktop onde o vídeo está sendo reproduzido. Você pode utilizar a rotina "getdc(0)", para capturar o device context do desktop e utilizar a rotina bitblt() para efetuar a cópia da imagem para o seu bitmap. Ao final, deve utilizar o "releasedc()" para liberar o device context.
Responder
Clique aqui para fazer login e interagir na Comunidade :)