2013-04-17 4 views
2

iPhone/iPod 용 사진 앱을 제작 중입니다.iOS 무손실 이미지 편집

아이폰 앱의 큰 이미지에서 원시 데이터를 가져 와서 일부 픽셀 조작을 수행하여 디스크/갤러리에 다시 쓰고 싶습니다.

CGImageRef imageBuff = [imageBuffer CGImage];//imageBuffer is an UIImage * 
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(imageBuff)); 
unsigned char *input_image = (unsigned char *)CFDataGetBytePtr(pixelData); 

//height & width represents the dimensions of the input image 

unsigned char *resultant = (unsigned char *)malloc(height*4*width); 

for (int i=0; i<height;i++) 
{ 
    for (int j=0; j<4*width; j+=4) 
    { 
     resultant[i*4*width+4*(j/4)+0] = input_image[i*4*width+4*(j/4)]; 
     resultant[i*4*width+4*(j/4)+1] = input_image[i*4*width+4*(j/4)+1]; 
     resultant[i*4*width+4*(j/4)+2] = input_image[i*4*width+4*(j/4)+2]; 
     resultant[i*4*width+4*(j/4)+3] = 255; 
    } 
} 
CFRelease(pixelData); 

내가 결과에 모든 작업을하고 있어요하고 다시 디스크에 쓰기 :

지금까지 나는 다음과 같은 기술을 사용하여 서명 숯불 포인터로 이미지 피커에서 얻은있는 UIImage을 변환했습니다 사용하여 원본 해상도 : 내가 좋아하는 것

 NSData* data = UIImagePNGRepresentation(image); 
    [data writeToFile:path atomically:YES]; 

알고 :

  1. 실제로 변환은 무손실입니까?
  2. 손에 20-22 MP 이미지가있는 경우 ... 백그라운드 스레드에서이 작업을 수행하는 것이 현명한 방법입니까? (충돌의 기회 등 ... 나는 이것을하는 가장 좋은 방법을 알고 싶다).
  3. 여기에 을 구현하는 더 좋은 방법이 있습니다 (여기 픽셀 데이터를 가져 오는 것이 필요합니다)?

답변

1

예이 방법은 무손실이지만 20-22 MP 이미지는 확실하지 않습니다. 내가 그 큰 이미지를 편집하고 싶다면 아이폰이 전혀 적합하지 않은 것 같아!

1

이 기술을 사용하여 22 MP까지 이미지 캡처 및 편집에 성공했습니다.

iPhone 4s에서 테스트했는데 정상적으로 작동했습니다. 그러나 사용하고있는 일부 효과는 코어 이미지 필터가 필요합니다. CIFilters가 16 개 이상의 MP 이미지를 지원하지 않는 것 같습니다. 이미지> 16MP에서 필터를 사용하면 빈 이미지가 반환됩니다.

저는 여전히 사람들이 iOS의 무손실 대형 이미지 편집 전략에 대해 의견을 말합니다.