Должен ли я умножить масштаб с значениями точки для отображения Retina, в этом случае?

StackOverflow https://stackoverflow.com/questions/3745126

Вопрос

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

Я рисую что-то в -Драверект: метод подкласса 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, вы должны обрабатывать масштаб самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top