Página 1 de 1

C# - canal aplha de imagens RGB?

MensagemEnviado: 07 Mai 2011 00:25
por chipselect
estou usando DirectShow.NET para pegar os frames de um vídeo que vem em RGB (24 bits) e aplicar como textura em um objeto 3D usando OpenGL.

Até ai tudo ia a mil maravilhas, até que um indivíduo pediu transparência.

Escolhi uma cor então como sendo transparência, e varro a imagem, pixel por pixel, copiando os valores R, G e B para um novo vetor prealocado que comporta os canais R, G, B e A, onde o A eu calculo a partir dos R, G e B. Sei que é um modo burro de fazer, mas sinceramente não sei trabalhar com o tal do DOT NET, sei C/C++ e java, mas me passaram o projeto começado com C#, daí tô fazendo nele.

Isso tudo não seria problema se eu não tivesse usando C# com SampleGrabber do DirectShow e a operação de cópia e cálculo do vetor com Alpha não fosse tão lerdo. Está funcionando, mas preciso otimizar.

Acho que não dá pra usar Buffer.BlockCopy porque copia blocos inteiros pois eu preciso inserir o tal do alpha. Isso valeria também pra Marshal.copy... estou errado?

Fazer em C++ a essa altura... se eu tivesse tempo daria, mas não vou ter.

Já tô usando threads para otimizar isso, mas tá comendo a cpu inteira...

Pensei em usar Emgu/OpenCV pra fazer isso pois já tô usando ele noutra parte do software, mas pelo que vi, o Emgu fica instanciando imagens com o seu equivalente do cvcopy, isso não resolveria....

Passar tudo pro escopo estático e otimizar não dá pois a alocação do player de textura é dinâmico e depende do objeto 3D que eu desenho na tela.

Alguém tem alguma sugestão?

MensagemEnviado: 07 Mai 2011 16:49
por vtrx
Não programo em C#,mas sei que a melhor maneira de voce trabalhar com esse efeito é usando DirectX(Alpha blending ),não costumo usar DirectShow(que acho que ja foi removido como nativo do directx).