es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que CGWindowListCreateImage renderice el color de fondo correcto?

Capturar una imagen de una ventana fuera de la pantalla con CGWindowListCreateImage es una forma común de crear animaciones de zoom estilo QuickLook, pero parece crear una imagen con un color de fondo incorrecto, ligeramente más claro que el de la ventana real.

Esto causa un destello al final de la animación que arruina un poco el efecto.

¿Alguien tiene alguna idea de por qué sucede esto y qué se puede hacer al respecto?

EDITAR: He creado una aplicación de demostración para este problema. Es un poco grande y compleja para una pregunta de Stack Overflow, pero el código relevante probablemente se encuentra en los métodos “takeSnapshot” y “makeAndPrepareSnapshotWindow” de “ZoomingWindow.m”.

Imagen de comparación de la ventana final y la captura de pantalla: https://i.stack.imgur.com/WYM0y.png

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible explicación para el color de fondo equivocado en la imagen capturada es que el contenido de la ventana se dibuja de forma asíncrona, lo que provoca un retraso en la actualización del color de fondo. Esto podría dar como resultado que el color de fondo aparezca ligeramente más claro en la imagen capturada.

    Para resolver este problema, un enfoque podría ser forzar que el contenido de la ventana se dibuje de forma sincrónica antes de capturar la imagen. Esto se puede lograr llamando a displayIfNeeded en la ventana antes de llamar a CGWindowListCreateImage.

    Otro enfoque podría ser establecer manualmente el color de fondo de la imagen capturada para que coincida con el color de fondo de la ventana. Esto se puede hacer creando una nueva NSImage con el mismo tamaño que la imagen capturada, creando un NSGraphicsContext con la nueva imagen como destino, estableciendo el color de fondo en el color de fondo de la ventana y luego dibujando la imagen capturada en la nueva imagen.

    La aplicación de demostración proporcionada por el autor original puede proporcionar información adicional sobre la causa del problema y soluciones potenciales.

Comments are closed.