J'écris un programme créant des images via openGL.
Dans une instance de NSView appelée mapView, j'écris donc ma routine openGL
dans DrawRect.
Je souhaite enregitrer mon image et j'ai essayé en .pdf puis en .tiff,
mais dans les deux cas j'obtiens une image blanche.
Si maintenant dans DrawRect je remplace les instructions openGL par:
mes deux routines d'enregistrement fonctionnent parfaitement et j'ai 2
images representant un carré vert, la pdf pesant 4k et la tiff 1Mo, donc
tout semble normal.
Mais avec openGL plus rien...
pour le pdf j'utilise:
NSData *image = [mapView dataWithPDFInsideRect:[mapView bounds]];
et pour le tiff:
NSData *tiff;
tiff = [[NSBitmapImageRep alloc] initWithFocusedViewRect:[mapView bounds]];
NSData *image =[tiff TIFFRepresentation];
Puis dans les 2 cas:
if ([image writeToFile:[sheet filename] atomically:NO]==NO) { etc...
Je comprends que ça ne fonctionne pas en pdf, mais avec le tiff ça devrait
marcher puisque initWithFocusedViewRect: est censé faire un snapshot du
NSView.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
lucsky
Louis Balourdet wrote:
Je comprends que ça ne fonctionne pas en pdf, mais avec le tiff ça devrait marcher puisque initWithFocusedViewRect: est censé faire un snapshot du NSView.
Oui, mais non. :)
Si je ne m'abuse, OpenGL n'est pas rendu dans le backing store de la fenêtre mais dans un buffer séparé, donc tout ce qui est rendu OpenGL ne peut pas être utilisé par un contexte Quartz directement (pour une sauvegarde ou une impression par exemple).
La solution c'est de récupérer la bitmap OpenGL en passant par 'glReadPixels' et de construire une NSBitmapImageRep manuellement à partir de ce buffer.
-- Luc Heinrich -
Louis Balourdet <L.Balourdet@wanadoo.fr> wrote:
Je comprends que ça ne fonctionne pas en pdf, mais avec le tiff ça devrait
marcher puisque initWithFocusedViewRect: est censé faire un snapshot du
NSView.
Oui, mais non. :)
Si je ne m'abuse, OpenGL n'est pas rendu dans le backing store de la
fenêtre mais dans un buffer séparé, donc tout ce qui est rendu OpenGL ne
peut pas être utilisé par un contexte Quartz directement (pour une
sauvegarde ou une impression par exemple).
La solution c'est de récupérer la bitmap OpenGL en passant par
'glReadPixels' et de construire une NSBitmapImageRep manuellement à
partir de ce buffer.
Je comprends que ça ne fonctionne pas en pdf, mais avec le tiff ça devrait marcher puisque initWithFocusedViewRect: est censé faire un snapshot du NSView.
Oui, mais non. :)
Si je ne m'abuse, OpenGL n'est pas rendu dans le backing store de la fenêtre mais dans un buffer séparé, donc tout ce qui est rendu OpenGL ne peut pas être utilisé par un contexte Quartz directement (pour une sauvegarde ou une impression par exemple).
La solution c'est de récupérer la bitmap OpenGL en passant par 'glReadPixels' et de construire une NSBitmapImageRep manuellement à partir de ce buffer.
-- Luc Heinrich -
Louis Balourdet
La solution c'est de récupérer la bitmap OpenGL en passant par 'glReadPixels' et de construire une NSBitmapImageRep manuellement à partir de ce buffer.
Merci bien. Je vais essayer ça ASAP.
Louis Balourdet
La solution c'est de récupérer la bitmap OpenGL en passant par
'glReadPixels' et de construire une NSBitmapImageRep manuellement à
partir de ce buffer.
La solution c'est de récupérer la bitmap OpenGL en passant par 'glReadPixels' et de construire une NSBitmapImageRep manuellement à partir de ce buffer.