2012-01-06 3 views
2

Чтобы определить соотношение, при котором масштабировать изображение, я использую следующий код (заимствованный из Trevor Harmon's UIImage+Resize):Как я могу работать с size_t и заканчивать CGFloat?

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. Как это сделать?

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

+0

Вы пытаетесь использовать 600.0 iso 600 ... making float/float = float? – tryme

ответ

3

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

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

Это то, что означало в другом посте суффикс f? Каждый узнает что-то каждый день. Спасибо, я приму ответ, как только мне позволено (по какой-то причине нужно ждать пять минут). –

+1

Да, по умолчанию 600.0 - это двойной литерал, а 600.0f - плавающий литерал. – Joe

+1

Немного в стороне, но CGFloat является двойным в 64-битном, поэтому в этом случае не так много смысла, указав float ... – joerick

Смежные вопросы