iOS перевернутые координаты хаос - PullRequest
3 голосов
/ 20 февраля 2011

Поэтому я использую CGBitmapContext для адаптации программного блиттера к iOS.Я записываю свои данные в растровое изображение, а затем использую функции CoreGraphics для записи текста поверх CGBitmapContext.Программный блиттер использует Upper Left Hand Origin, в то время как функции CoreGraphics используют Lower Left Hand Origin.Поэтому, когда я рисую изображение с помощью блиттера в точке (0, 0), оно появляется в верхнем левом углу.Когда я рисую текст, используя CG в точке (0, 0), он появляется в левом нижнем углу и НЕ ОБРАЩАЕТСЯ.Да, я прочитал все остальные вопросы об инверсии координат и делаю это с полученным изображением компьютерной графики, чтобы правильно отобразить его в виде.Возможно, пример кода поможет ...

    // This image is at the top left corner using the custom blitter.
screen->write(image, ark::Point(0, 0));
// This text is at the bottom left corner RIGHT SIDE UP
// cg context is a CGBitmapContext
CGContextShowTextAtPoint(
    cgcontext, 
    0, 0, 
    str.c_str(), 
    str.length());

// Send final image to video output.
CGImageRef screenImage = CGBitmapContextCreateImage(cgcontext);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, 480);
// Here I flip the whole image, so if I flip the text above, then
// it ends up upside down.
CGContextScaleCTM(context, 1, -1); 
CGContextDrawImage(context, 
    CGRectMake(0, 0, 320, 480), screenImage);
CGContextRestoreGState(context);

CGImageRelease(screenImage);

Как я могу смешивать системы координат?Как я могу нарисовать текст правой стороной вверх с помощью ULC origin?

1 Ответ

1 голос
/ 20 февраля 2011

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

Все всегда рисует с положительным y, повышающимся и отрицательным y, понижающимся.Текст поднимается в сторону положительного значения y и опускается ниже базовой линии в направлении отрицательного значения y.Базовые линии последовательных линий имеют более низкие и более низкие позиции у.То же самое относится и к изображениям и (нетекстовым) путям - все рисуется таким образом.

То, что вы делаете путем преобразования системы координат, не меняет то, как рисуют вещи;они всегда рисуют с позитивным уклоном. Чтобы преобразовать систему координат, нужно переопределить вверх и вниз .Вы превращаете положительный у в отрицательный у, и наоборот.Вы также изменяете, где 0, 0.

Так что вам нужно не перевернуть систему координат, а (только) перевести ее.Вам нужно перевести вверх на всю высоту контекста, минус высота строки текста.Затем, с 0,0, определенным в качестве этой позиции, вы можете показать свой текст в 0,0, и он будет рисовать с этой позиции и вправо вверх (и вниз).

Или не переводитьи просто показать текст с этого момента.В любом случае будет работать.

Я почти уверен, что вам не нужно и не нужно никаких преобразований в контексте назначения.Перевод (если вы переводите) должен происходить в контексте растрового изображения.

...