2012-01-06 4 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은 I는 조정 된 이미지에 대해 원하는 최대 크기를 나타낸다. CGImageGetWidth 및 CGImageGetHeight는 ARC에 따라 iPhone 플랫폼 (iOS 5)에서 부호없는 long으로 평가되는 size_t를 반환합니다. 현재 코드의 문제점은 비율이 항상 0.0000을 평가한다는 것입니다. imageRef의 너비와 높이는 실제로 w = 768, h = 780이므로 비율은 MAX (0.781, 0.769) = 0.78이어야합니다. 어떻게 나야?

P. 위의 코드를 UIImage의 initWithCGImage에 사용했을 때 : scale : orientation : 스케일이 예상 한 것과 다르게 작동한다는 것을 알았습니다 : 0.78 의 비율로 이미지가으로 확대되었습니다. 너비 또는 높이를 원하는 크기로 나누면 (CGImageGetWidth (imageRef)/600 등에서와 같이) 문제가 해결되었습니다.

+0

600.0 iso 600을 시도해 보셨습니까? float/float = float를 만드시겠습니까? – tryme

답변

3

적절한 나누기를 수행하려면 하나의 값이 부동 소수점이어야합니다. 정수 부분은 항상 부동 소수점 숫자를 자릅니다. 가장 쉬운 해결책은 숫자를 실수 리터럴로 바꾸는 것입니다.

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

그게 다른 게시물에서 f 접미사로 의미 한 것입니까? 사람은 매일 무언가를 배웁니다. 고마워, 나는 (내가 웬일인지 5 분을 기다려야한다) 허락하자마자 대답을 받아 들일 것이다. –

+1

예, 기본적으로 600.0은 이중 리터럴이고 600.0f는 부동 리터럴입니다. – Joe

+1

비트는 제외하지만 CGFloat는 64 비트에서 두 번이므로이 상황에서 float를 지정하는 것은 그리 중요하지 않습니다 ... – joerick

관련 문제