2015-02-25 2 views
1

Je vais essayer d'obtenir la capture d'écran de l'affichage de la rétine, et dessiner cette image sur la fenêtre.Cacao - capture d'écran et dessiner (rétine)

Je peux obtenir la capture

CGDirectDisplayID displayId = CGMainDisplayID() 
CGImage imageRef = CGDisplayCreateImage(displayId) 

image ont une taille 2560x1600

Maintenant, je dois dessiner cette image sur la fenêtre. Mais si, je redimensionne la fenêtre en plein écran, la taille de retour de la fenêtre 1280x800. Si je ne dessine pas l'image sur la fenêtre, j'ai besoin de l'image d'échelle à 1280x800. Image perte de qualité, ce n'est pas bon.

S'il vous plaît aidez-moi, comment puis-je obtenir une capture d'écran de l'affichage de la rétine et dessiner son sur la fenêtre, sans perte de qualité?

+0

NSImage peut avoir plusieurs représentations. Vous pouvez conserver les deux résolutions dans l'image en tant que représentation. S'il vous plaît se référer ce lien pour cela http://stackoverflow.com/questions/12681902/issues-with-nsimage-add-representation-in-retina-display –

+0

par exemple CGDirectDisplayID displayID = CGMainDisplayID(); CGImageRef imageRef = CGDisplayCreateImage (displayID); NSSize tailleRef; sizeRef.width = CGImageGetWidth (imageRef); sizeRef.height = CGImageGetHeight (imageRef); NSImage * imageCG = [[allocation NSImage] initWithCGImage: taille imageRef: tailleRef]; NSBitmapImageRep * imgRep = [[représentations imageCG] objectAtIndex: 0]; NSData * data = [imgRep representationUsingType: NSPNGFileType propriétés: néant]; [data writeToFile: @ "/ Desktop/file.png" atomiquement: NO]; Je comprends bien? –

+0

je vérifie l'image, son a une représentation. –

Répondre

0

Vous pouvez trouver la taille réelle de la fenêtre en pixels en passant son cadre à cette méthode:

-[NSWindow convertRectToBacking:]

0

Dessinez l'image aux limites de la vue. En théorie, il s'agit d'une opération de mise à l'échelle, mais en réalité ce n'est pas parce que les limites de la vue sont en points, pas en pixels. Le tampon de sauvegarde pour la vue est au même DPI que la capture d'écran d'origine, donc ce sera un blit direct. Aucun détail ne sera perdu.