2011-01-24 10 views
6

EDITAR: Dado que mi problema original se debió a mi error, volveré a formular esta pregunta.Copiar contenido de Hosted Silverlight Control

Alojo un Silverlight en una ventana dentro de mi aplicación C++ según el código encontrado here.

Ahora me gustaría copiar el contenido del control en la memoria para usar el contenido dentro de mi propio procesador. El problema que tengo es que cuando configuro "EnableGPUAcceleration" en true, entonces BitBlt deja de funcionar, todo lo que obtengo es blackness.

Creo que en teoría debería haber una forma de copiar el contenido de un control Silverlight acelerado por la GPU con su alfa, p. con algo como glReadPixels.

¿Alguien tiene alguna idea de cómo copiar el contenido con alfa de un control Silverlight acelerado por gpu que no tiene ventanas?

Otro problema es que la ventana debe estar visible y ninguna otra ventana puede solaparse, de lo contrario no obtendré el contenido adecuado. Me gustaría que la ventana de alojamiento sea invisible.

El código de muestra de trabajo se puede encontrar en here (aunque sin el "ting" real de BitBlt que estoy tratando de poner en práctica).

+2

¿Tiene un código de muestra que realmente demuestre su problema alfa? Porque el control Silverlight alojado en CodeProject se puede copiar con éxito con BitBlt, ¿verdad? ¿O me estoy perdiendo algo? –

+0

@Simon: Estás en lo correcto. Mi código de prueba fue incorrecto. – ronag

Respuesta

2

Comenzaré a investigar esto, tengo una idea de que OpenCL o quizás ya que está usando Silverlight, DirectCompute puede configurar un contexto donde pueda tener más flexibilidad.

Una forma sería simplemente hacer toda la aceleración de la GPU en uno de esos idiomas. Mientras tanto, intentaré averiguar si puedes usar uno de ellos para obtener la información que necesitas u otras técnicas.

This link parece que verificará que necesitará la aceleración de la GPU habilitada en todos los miembros interactivos.

EDIT:

creo que el artículo puede proporcionar algún otro tipo de ayuda para su problema. Básicamente se tratará de acceder al caché y asegurarse de que está utilizando el caché. Todo lo que esté configurado en modo caché se almacenará en la tarjeta gráfica temporalmente.

This article también arroja algo de luz sobre los problemas. Cuando se habla de la representación de hardware, es importante tener en cuenta qué operaciones causarían problemas con la memoria caché.

Debo admitir que no soy nada fluido en Silverlight, pero estos tipos de problemas son familiares. Haciendo lo que puedo para entender la situación de tu código.

-1

Lamentablemente no se puede (en mi humilde opinión).

Si habilita la aceleración, todo el procesamiento de video se realiza en el gpu y se envía a la pantalla utilizando un búfer de superposición de hardware. por lo tanto no es accesible.

Lo mismo es cierto para la función de impresión de pantalla en Windows. a menos que pueda acceder a la GPU y extraer los píxeles tiene problemas.

Echa un vistazo a la sección de capturas de pantalla aquí ...http://en.wikipedia.org/wiki/Hardware_overlay

Soy un novato en Silverlight y, por lo tanto, no sé qué hay disponible, pero puede extraer los datos antes de que se procesen. Sin embargo, esto puede ralentizar la aplicación dramáticamente. La aceleración de gpu está diseñada para eliminar restricciones de CPU y ancho de banda, por lo tanto, cualquier cosa que entre en la ruta ralentizará. también puede activar el bit de inclinación (DRM) deshabilitando todo.

DC

Cuestiones relacionadas