2010-08-06 8 views
1

J'ai fait un graphique merveilleusement simple utilitaire sur le léopard avec le Quartz-2d liaison pour python:Porting Quartz démo 2d python à Core Core C pure

http://developer.apple.com/graphicsimaging/pythonandquartz.html

que les entrées essentiellement un fichier texte et écrit un fichier .png agréable (il est une ligne de commande utilitaire). J'ai été heureux comme un cochon dans la boue jusqu'à ce que j'ai déplacé l'utilitaire à nos serveurs Snow Leopard et découvert qu'il y avait toutes sortes de problèmes avec CoreGraphics et 32 ​​bits python sur Snow Leopard. Certains de ces problèmes sont solubles et d'autres non. Donc, je tente de porter ce script utilitaire simple à l'objectif-c (vraiment C je suppose) et en cours d'exécution dans quelques problèmes. Est-ce que quelqu'un d'autre sait s'il y a un bel exemple presque exactement comme celui donné en python et quartz, mais tout en code natif?

Mon problème majeur est en train d'écrire le contexte graphique dans un fichier

myBitmapContext = MyCreateBitmapContext (400, 300); 

CGContextSetRGBFillColor (myBitmapContext, 1, 0, 0, 1); 
CGContextFillRect (myBitmapContext, CGRectMake (0, 0, 200, 100)); 
CGContextSetRGBFillColor (myBitmapContext, 0, 0, 1, .5); 
CGContextFillRect (myBitmapContext, CGRectMake (0, 0, 100, 200)); 
CGImageRef myImage = CGBitmapContextCreateImage (myBitmapContext);// 5 

CGContextDrawImage(myBitmapContext, myBoundingBox, myImage);// 6 
char *bitmapData = CGBitmapContextGetData(myBitmapContext); // 7 

// I'd like to write to a file here! 

CGContextRelease (myBitmapContext);// 8 
if (bitmapData) free(bitmapData); // 9 
CGImageRelease(myImage); 

MyCreateBitmapContext est une simple fonction de apple's guide on quartz 2d.

TL; DR Quelqu'un at-il un port C de la démo python donnée dans le lien ci-dessus?

Répondre

1
CGImageRef myImage = CGBitmapContextCreateImage (myBitmapContext);// 5 

CGContextDrawImage(myBitmapContext, myBoundingBox, myImage);// 6 

Quoi? Pourquoi voudriez-vous capturer le contenu du contexte en tant qu'image, puis ramener cette image dans le contexte dont vous l'avez obtenue?

// I'd like to write to a file here! 

Do étape 5, puis nourrir cette image à un CGImageDestination. Vous pouvez trouver le Core Graphics Reference Collection à portée de main. Il y a un document comme celui-là pour chacun des cadres.

+0

C'était une démo stupide dans Core Grahpics. Je pense avoir trouvé ce que je cherchais dans l'image i/o ... http://developer.apple.com/mac/library/documentation/GraphicsImaging/Conceptual/ImageIOGuide/ikpg_dest/ikpg_dest.html. Merci d'avoir remarqué ça! – Ralphleon

+0

Oui, CGImageDestination et CGImageSource sont les deux classes du framework ImageIO, mais elles font également partie de Core Graphics. –