2012-01-06 80 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表示欲用於縮放的圖像的最大大小。根據ARC的說法,CGImageGetWidth和CGImageGetHeight返回size_t,在iPhone平臺(iOS 5)上評估爲無符號long。 本代碼的問題是該比率總是評估0.0000。 imageRef的寬度和高度實際上是w = 768,h = 780,所以比率應該是MAX(0.781,0.769)= 0.78。我如何?

P.S.當我使用上面的代碼爲UIImage的initWithCGImage:scale:orientation:我發現縮放比我預期的工作不同:傳遞的比例爲0.78 放大圖像。將寬度或高度除以所需的大小(如在CGImageGetWidth(imageRef)/ 600等中),修復了問題。

+0

您是否試過600.0 iso 600 ...使float/float = float? – tryme 2012-01-06 15:47:57

回答

3

你需要一個值來做一個浮動來做適當的劃分。整數除法總是截斷浮點數。最簡單的解決方案是將您的數字轉換爲浮點文字。

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

那是在另一篇文章中用f後綴表示的意思嗎?人們每天都會學到東西。謝謝,我會盡快接受答案(因爲某些原因,我必須等待五分鐘)。 – 2012-01-06 15:56:35

+1

是的,默認情況下,600.0是雙字面值,600.0f是浮點值。 – Joe 2012-01-06 15:58:59

+1

旁邊的位,但CGFloat是64位的雙倍,所以在這種情況下沒有太多的指向float的點。 – joerick 2012-01-07 11:34:14