Должен ли я умножить масштаб на значения точек для отображения сетчатки, в этом случае? - PullRequest
4 голосов
/ 19 сентября 2010

С тех пор как на сетчатке появилось изображение, этот код рисования внезапно перестал работать. Нарисованное изображение слегка смещено, чем было раньше, и выглядит несколько растянутым.

Я рисую что-то в -drawRect: метод подкласса UIControl. Я понял, что текущий масштаб внутри этого UIControl действительно равен 2,0. Этот код получает CGImage из UIImage, который, вероятно, ничего не знает о масштабе. Он передается в качестве параметра для метода, который также принимает некоторые значения точек прямо сейчас.

CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);

Примечание: DrawingRect в пунктах. img.size.width внутри NSLog действительно выводит правильное значение в точках, в то время как [img CGImage] выводит изображение @ 2x для отображения сетчатки. Я сделал проверку, чтобы проверить это:

NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));

Вывод на консоль: image height = 31.000000 (CGImage = 62)

Как бы я справился с изображением @ 2x здесь? Должен ли я умножать каждое значение на шкалу вручную? Но это также может испортить фактический видимый прямоугольник на экране, или нет?

1 Ответ

3 голосов
/ 19 сентября 2010

Да.

CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale

Кроме того, вы можете использовать -[UIImage drawAtPoint:], -[UIImage drawInRect:] и другие подобные методы, которые автоматически работают со шкалой.Если вы опуститесь до CGImage, вам придется справиться со шкалой самостоятельно.

...