En mi aplicación para iPad, estoy procesando un mapa de bits fuera de pantalla, y luego dibujando el mapa de bits en la pantalla. (Esto se debe a que quiero reutilizar el código de representación de mapa de bits existente.) En el iPad 2, funciona como un amuleto, pero en el nuevo iPad con pantalla Retina, dibujar el mapa de bits es realmente lento, aunque su resolución sigue siendo la misma. mismo.Imagen de dibujo con CoreGraphics en Retina El iPad es lento
Para dibujar el mapa de bits, utilizamos las funciones regulares de cuarzo 2D: CGImageCreate
con un proveedor de datos creado por CGDataProviderCreateWithData
, formato RGBA de 32 bits con kCGImageAlphaNoneSkipLast
. En el UIView
que muestra el mapa de bits, en drawRect:
, usamos CGContextDrawImage
para dibujarlo en el contexto devuelto por UIGraphicsGetCurrentContext
.
Tenga en cuenta que ni siquiera estoy tratando de dibujar a doble resolución: por ahora estoy bien con la misma resolución que estaba usando en el iPad 2. Parece que CoreGraphics está doblando internamente los píxeles, y luego enviando eso a la GPU, a pesar de que el CGImage
que estoy haciendo debería estar bien para pasar a la GPU directamente. ¿Algunas ideas?
Gracias por la información, que probablemente va a ayudar mucho. La vista está animada, por lo que se vuelve a dibujar a menudo. Creo que, por lo tanto, usando view.layer.contenido es probablemente más eficiente que asignar una nueva imagen a UIImageView, ¿verdad? –
Lo intenté y el método view.layer.contents funciona estupendamente, ¡gracias de nuevo! –
AFAIK los dos métodos son casi iguales en rendimiento, pero como siempre: si es importante, pruébelo y vea. –