2012-10-30 3 views
1

4S (3GS가 아님)에서만 발생하는 크래시가 있습니다. 나는 @ 2x 때문에 그것을 의심하고있다. 기본적으로 이미지의 원시 바이트를 가져 와서 조작합니다. 여기에 내가 가진 질문이있다.iphone 4s - UIImage CGImage 이미지 크기

아래 예제 코드에서 설명한대로 이미지를로드합니다. 결국, uiWidth는 2000이어야하고 cgwidth는 2000이어야합니다. 맞습니까? (이미지가 카메라 롤에서로드? 또는 자동 확장 및 uiWidth 4000 것입니다 경우 그것은 여전히 ​​사실시겠습니까?)

//test.jpg is 2000x 1500 pixels. 
NSString *fileName = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"]; 
UIImage *image = [UIImage imageWithContentsOfFile:fileName]; 

int uiWidth = image.size.width; 

CGImageRef cgimg = image.CGImage; 

int cgWidth = CGImageGetWidth(cgimg); 

당신의 도움에 감사드립니다.

+0

Xcode는 @ 2x를 자동으로 처리합니다. 코드에 이중 크기를 설정할 필요가 없습니다. – Raptor

답변

13

UIImage에 의해 신고 된 size은 (는) 픽셀 수가 아니고 점으로 표시됩니다. scale 속성이 UIImage이어야합니다.

즉, test.jpg이 1000x1000 인 경우 UIImage.size은 1000x1000을보고합니다. [email protected]이 2000x2000이면 UIImage.size도 1000x1000을보고합니다. 그러나 두 번째 경우에는 UIImage.scale이보고합니다.

CGImageGetWidth은 포인트가 아니라 픽셀 단위로 폭을보고합니다.

+0

즉, 인수로 스케일을 사용하지 않으면 UIImage.size와 CGImageGetWidth가 같아야합니다. 권리? – Jailbroken

+0

아니요, 그 반대입니다. UIImage 포인트를 픽셀로 변환하려면 눈금으로 곱해야합니다. – rmaddy

+7

안녕하세요, 유권자 여러분, 설명을 해주시기 바랍니다. – rmaddy