Должен ли я умножить масштаб с значениями точки для отображения Retina, в этом случае?
-
04-10-2019 - |
Вопрос
Поскольку дисплей сетчатки, вдруг этот кусок рисования кода, кажется, больше не работает. Нарисованное изображение немного смещено, чем раньше, и кажется несколько растяженным.
Я рисую что-то в -Драверект: метод подкласса UICONTROL. Я понял, что текущая шкала внутри этого UIControl действительно 2,0. Этот код получает CJImage из Uiimage, который, вероятно, ничего не узнает о масштабе. Он кормлен в качестве параметра к способу, который также принимает некоторые значения значения прямо сейчас.
CGContextDrawImage(context, CGRectMake(drawingRect.origin.x, drawingRect.origin.y, img.size.width, img.size.height), [img CGImage]);
ПРИМЕЧАНИЕ. Реутина находится в точках. IMG.Size.width внутри NSLog выводят правильное значение в точках, а [IMG CJImage] выводит изображение @ 2x для отображения Retina. Я провел проверку, чтобы проверить это:
NSLog(@"image height = %f (CGImage = %d)", img.size.height, CGImageGetHeight([img CGImage]));
Вывод в консоли: image height = 31.000000 (CGImage = 62)
Как бы я имел дело с изображением @ 2x здесь? Должен ли я умножить каждое значение с масштабом, вручную? Но это также привернут фактический видимый прямоугольник на экране или нет?
Решение
да.
CGImageGetWidth([image CGImage]) == image.size.width * image.scale
CGImageGetHeight([image CGImage]) == image.size.height * image.scale
В качестве альтернативы вы можете использовать -[UIImage drawAtPoint:]
, -[UIImage drawInRect:]
и другие аналогичные методы, которые касаются масштаба автоматически. Если вы бросили CGImage
, вы должны обрабатывать масштаб самостоятельно.