Портирование демонстрации Quartz 2d python на чистый Core Graphics C

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

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

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

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

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, указанной в приведенной выше ссылке?


person Ralphleon    schedule 06.08.2010    source источник


Ответы (1)


CGImageRef myImage = CGBitmapContextCreateImage (myBitmapContext);// 5

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

Какая? Зачем вам фиксировать содержимое контекста в виде изображения, а затем возвращать это изображение обратно в контекст, из которого вы его получили?

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

Выполните шаг 5, затем отправьте это изображение в CGImageDestination. .

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

person Peter Hosey    schedule 06.08.2010
comment
Это была дурацкая демонстрация в Core Graphics. Думаю, я нашел то, что искал, в графическом вводе/выводе... developer.apple.com/mac/library/documentation/GraphicsImaging/. Спасибо, что заметили это, хотя! - person Ralphleon; 06.08.2010
comment
Да, CGImageDestination и CGImageSource — это два класса инфраструктуры ImageIO, хотя они также считаются частью Core Graphics. - person Peter Hosey; 06.08.2010