Как я могу работать с size_t и получить CGFloat? - PullRequest
2 голосов
/ 06 января 2012

Чтобы определить коэффициент масштабирования изображения, я использую следующий код (заимствовано из UIImage + Resize Тревора Хармона):

CGFloat horizontalRatio = 600 / CGImageGetWidth(imageRef);
CGFloat verticalRatio = 600 / CGImageGetHeight(imageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio);

600 представляет собойМаксимальный размер, который я хочу для масштабированного изображения.CGImageGetWidth и CGImageGetHeight возвращают size_t, который, согласно ARC, оценивается как длина без знака на платформе iPhone (iOS 5).Проблема с настоящим кодом состоит в том, что соотношение всегда оценивается в 0,0000.Ширина и высота imageRef на самом деле w = 768, h = 780, поэтому соотношение должно быть MAX (0,781, 0,769) = 0,78.Как мне это сделать?

PS Когда я использовал приведенный выше код для UIImage initWithCGImage: scale: direction: я обнаружил, что масштаб работает не так, как я ожидал: проход в соотношении 0,78 увеличено изображение.Разделение ширины или высоты на желаемый размер (как в CGImageGetWidth (imageRef) / 600 и т. Д.) Решило проблему.

1 Ответ

3 голосов
/ 06 января 2012

Вам нужно одно значение, чтобы быть float, чтобы сделать правильное деление.Целочисленное деление всегда усекает числа с плавающей запятой.Самое простое решение - превратить ваши числа в литералы с плавающей точкой.

CGFloat horizontalRatio = 600.0f / CGImageGetWidth(imageRef);
CGFloat verticalRatio = 600.0f / CGImageGetHeight(imageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio);
...