контекст рисования iphone - PullRequest
0 голосов
/ 15 июля 2010

Я не пытаюсь нарисовать на компоненте. Я просто пытаюсь создать новый контекст (я думаю) и выложить UIImage с содержимым моего рисунка на нем.Я не пытаюсь рисовать на любом существующем компоненте.Я использую следующий код:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, self.textSize.width, self.textSize.height, 8, 4 * self.textSize.width, 
                                             colorSpace, kCGImageAlphaPremultipliedFirst);
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1);
NSString *text = @"Hello world";
[text drawAtPoint:CGPointMake(0, 0) forWidth:maxWidth withFont:font lineBreakMode:UILineBreakModeWordWrap];

CGImageRef imageMasked = CGBitmapContextCreateImage(context);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

UIImage * myRendering = [UIImage imageWithCGImage:imageMasked];

К сожалению, я получаю сообщение об ошибке «Недопустимый контекст».Поиски в Google, казалось, только поднимали людей, пытающихся использовать существующие компоненты.Я хочу выплюнуть новый UIImage.

Я попробовал пример здесь для создания контекста растрового изображения - http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203-SW9

Я все еще получаю:

: CGContextGetShouldSmoothFonts: неверный контекст: CGContextSetFont: недопустимый контекст: CGContextSetTextMatrix: недопустимый контекст: CGContextSetFontSize: недопустимый контекст и т. Д. *

Ответы [ 3 ]

0 голосов
/ 16 июля 2010

Хорошо, проблема в том, что я не поместил свой код для растрового изображения в viewDidLoad.Я действительно не понимаю этого.Почему это так не интуитивно понятно?

0 голосов
/ 17 июля 2010

Прежде всего, проверьте, действительно ли вы создали контекст, проверив возвращаемое значение CGBitmapContextCreate.то есть

if ( context == NULL ) NSLog(@"glad I always check my return values!");

и проверьте консоль на наличие сообщений.

Если вы не создали контекст, проверьте, разрабатываете ли вы iOS 4.0 или более позднюю версию.Если нет, не передавайте NULL в качестве первого аргумента, но malloc кусок памяти.

0 голосов
/ 15 июля 2010

Вы всегда рисуете в контексте.Сам контекст может быть связан с дисплеем, растровым изображением или даже PDF.

В зависимости от того, чего вы хотите достичь, вы должны создать контекст или использовать существующий.Для пользовательских компонентов (я предполагал, что вы имеете в виду это, потому что вы упомянули JPanel) вы просто переопределяете метод drawRect UIView следующим образом.

- (void)drawRect:(CGRect)rect {
    CGContextRef ctx = UIGraphicsGetCurrentContext();

Как вы видите, контекст уже создан для вас, и вы получаетеэто по телефону UIGraphicsGetCurrentContext().

...