2009-08-09 2 views
3

Я пытаюсь нарисовать строку в этой текстуре:перелистывание NSString рисунка в CGContext

http://picasaweb.google.it/lh/photo/LkYWBv_S_9v2d6BAfbrhag?feat=directlink

но зеленые цифры кажутся вертикальными переворачиваются. Я создал свой контекст следующим образом:

colorSpace = CGColorSpaceCreateDeviceRGB(); 
data = malloc(height * width * 4); 
context = CGBitmapContextCreate(data, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 

и нарисована строка:

UIGraphicsPushContext(context); 

for(int i=0;i<packs.size();++i) 
{ 
    CGPoint points[4] = 
    { 
     gltextures[i].texCoords[0] * size.width,  //0 
     gltextures[i].texCoords[1] * size.height,  //1 

     gltextures[i].texCoords[2] * size.width,  //2 
     gltextures[i].texCoords[3] * size.height,  //3 

     gltextures[i].texCoords[4] * size.width,  //4 
     gltextures[i].texCoords[5] * size.height,  //5 

     gltextures[i].texCoords[6] * size.width,  //6 
     gltextures[i].texCoords[7] * size.height  //7 

    }; 

    CGRect debugRect = CGRectMake 
    (
    gltextures[i].texCoords[0] * size.width, 
    gltextures[i].texCoords[1] * size.height, 
    gltextures[i].width, 
    gltextures[i].height 
    ); 
    CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]); 
    CGContextAddLines(context, points, 4); 
    CGContextClosePath(context); 
    CGContextDrawPath(context, kCGPathStroke); 

    NSString* s = [NSString stringWithFormat:@"%d",gltextures[i].texID]; 
    UIFont* font = [UIFont fontWithName:@"Arial" size:12]; 
    CGContextSetRGBFillColor(context, 0, 1, 0, 1); 
    [s drawAtPoint:points[0] withFont:font]; 
} 
UIGraphicsPopContext(); 

Матрица преобразования кажется единичной матрица ... нет CGAffineTransform не применяется к данному контексту , Если строка перевернута, возможно, все мои изображения перевернуты! Любое предложение?

PS: Извините за мой английский;)

ответ

7

Как описывают here, систему координат для контекста в UIView или его слой переворачивается, когда по сравнению с нормальным Кварц пространства для рисования. Однако при использовании кварца для рисования на изображении это уже не так. Категория UACtringDrawing Cocoa Touch на NSString, которая дает вам -drawAtPoint: метод withFont: предполагает перевернутый макет, и именно поэтому вы видите перевернутый текст на своем изображении.

Одним из способов обойти это было бы сохранение состояния графики, применение инвертированного преобразования к изображению, рисование текста и восстановление старого состояния графики. Это будет выглядеть примерно так:

CGContextSaveGState(context); 
CGContextTranslateCTM(context, 0.0f, self.bounds.size.height); 
CGContextScaleCTM(context, 1.0f, -1.0f); 

[text drawAtPoint:CGPointMake(0.0f, 0.0f) withFont:font]; 

CGContextRestoreGState(context); 

Это довольно грубый пример, в том, что я считаю, это просто рисует текст в нижней части изображения, но вы должны быть в состоянии настроить перевод или координату текста, чтобы разместить его там, где это необходимо.

2

лучше сохранить матрицу текст «s до розыгрыша, в противном случае это будет влиять на другой текст ничью CoreGraphic:

CGContextSaveGState(ctx); 
CGAffineTransform save = CGContextGetTextMatrix(ctx); 
CGContextTranslateCTM(ctx, 0.0f, self.bounds.size.height); 
CGContextScaleCTM(ctx, 1.0f, -1.0f); 
[str drawAtPoint:point withFont:font]; 
CGContextSetTextMatrix(ctx, save); 
CGContextRestoreGState(ctx); 
Смежные вопросы