Портирование демо Quartz 2d Python на чистую Core Graphics C - PullRequest
1 голос
/ 06 августа 2010

позвольте мне прежде всего отметить, что я абсолютно не знаю, что я делаю с целью-c и разработкой Mac (хотя я в порядке с c). Я сделал удивительно простую графическую утилиту на леопарде с привязкой Quartz-2d для python:

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

, который в основном вводит текстовый файл и записывает хороший файл png (это утилита командной строки). Я был счастлив, как свинья в грязи, пока я не перенес утилиту на наши серверы снежного барса и обнаружил, что с CoreGraphics и 32-битным питоном на снежном барсе были всевозможные проблемы. Некоторые из этих проблем разрешимы, а некоторые нет. Итак, я пытаюсь перенести этот простой служебный скрипт на target-c (я полагаю, на C) и столкнулся с несколькими проблемами. Кто-нибудь еще знает, есть ли хороший пример, почти такой же, как приведенный в python и кварце, но все в нативном коде?

Моя основная проблема - запись графического контекста в файл

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 - это простая функция из справочника Apple по кварцу 2d .

TL; DR У кого-нибудь есть порт C демонстрационной версии python, приведенной в ссылке выше?

1 Ответ

1 голос
/ 06 августа 2010
CGImageRef myImage = CGBitmapContextCreateImage (myBitmapContext);// 5

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

Что?Зачем вам захватывать содержимое контекста как изображение, а затем рисовать это изображение обратно в контекст, из которого вы его получили? CGImageDestination .

Вы можете найти Базовую графическую справочную коллекцию под рукой.Такой документ есть для каждого из большинства фреймворков.

...