2010-05-20 2 views
5

그레이 스케일 png 이미지를로드 중이고 기본 픽셀 데이터에 액세스하려고합니다. 그러나 CGImageGetDataProvider를 통해 픽셀 데이터를로드 한 후 반환되는 데이터의 길이가 예상보다 길어집니다.CGImageGetDataProvider에서 반환 된 데이터의 길이가 예상보다 큽니다

CCGDataProviderRef provider = CGDataProviderCreateWithFilename(cStr); 
CGImageRef image = CGImageCreateWithPNGDataProvider(provider, NULL, FALSE, kCGRenderingIntentDefault); 

mapWidth = CGImageGetWidth(image); 
mapHeight = CGImageGetHeight(image); 

lookupMap = CGDataProviderCopyData(CGImageGetDataProvider(image)); 

mapWidth 1804에 나오는 mapHeight은 1005 내가 호출 할 때 1,813,020

로되어있는 제품으로 나오는

CFDataGetLength(lookupMap) 

응답은 1833120.

어디 이 여분의 20100 바이트가 어디서 오는가? 여기에 도움을 주시면 감사하겠습니다. 이미지의 기본 형식에 대해 뭔가 빠졌습니까?

CFDataRef를 자세히 살펴보면 버퍼를 통해 루프하면 각 행에 대해 바이트가 나타납니다. 0에서 1803까지는 내 이미지에서 정확하고 다음 20 바이트는 모두 0입니다. 그래서 이것은 내 반환 된 이미지가 1804 x 1005 이미지 대신 실제로 1824 x 1005 이미지로 돌아 오는 것을 의미합니다. 이유에 대해서는 아직 설명이 없습니다.

답변

3

내 행 하나 하나 끝에 버퍼가 추가됩니다. 사용을 시작했습니다.

CGImageGetBytesPerRow 

미스터리를 해결했습니다.

관련 문제