2012-01-05 8 views
2

iOS에서 작업하고있는 응용 프로그램에서 사용자로부터 그림을 얻어야하며, 그런 다음이를 우리가 모두 좋아하는 딱딱하고 픽셀 화 된 8 비트 스타일로 변환해야합니다. 나는 몇몇 Quartz/CoreImage (필자의 Mac과 iOS 개발자가 methink를 뒤섞 었음) 필터를 사용한다고 가정한다. 나는 이들 중 어느 것도 사용한 적이 없기 때문에 어떤 도움을 주시면 감사하겠습니다.iOS의 8 비트 이미지

답변

1

이 과정으로 만 사용할 수 있음을 명심해야

가 직접 작성하는 것은 매우 간단합니다. CoreGraphics를 사용하여 CGImage 및 CGBitmapContext를 사용하여 비트 맵에 렌더링 할 수 있습니다. 그런 다음 픽셀 값을 직접 조작하십시오.

8 비트 표현 중 하나를 것 :

  • 사용 컬러 룩업 테이블/
  • 컬러 맵 또는 RRRGGGBB 형식

전자는 더 복잡하다. 이것이 처음이라면 픽셀 값을 대략 RRRGGGBB로 변환하여 시작하십시오. CoreGraphics를 통해 비트 맵을 만들고 비트 맵을 만드는 방법을 알고 있다고 가정하면 (많은 예제가 있습니다.) 모두 설정되어 있습니다!

+0

Core Image를 사용하면 GPU를 활용하므로 실제로 이렇게하는 것보다 훨씬 빠릅니다. Core Image를 사용하면 이미지 조작 코드를 쓸 필요가 없습니다. 항상 유용합니다 ... –

+0

그러나 iOS 4 (또는 3)는 지원할 수 없습니다. – jrtc27

+0

@Rob 1) GPU에 대한 좋은 지적이지만 모든 시나리오에서 확실히 빠르지는 않습니다. 2) CI는 어디에서 그리고 어떤 이유로 - CG (유사한 개념을 기반으로하는 예로서)가 GPU에서 많은 작업을 확실히 수행 하는지를 보장하지 않습니다. 3) 귀하의 예는 효과의 근사치입니다 - 그러나 그것은 좋게 보입니다. 4) iOS 5 이전에는 CI를 사용할 수 없습니다. 보너스) 이미지 조작 코드는 재미 있습니다 !!! ... 우리 중 일부는;) 그래서 나는 대답했을 때 다른 대답이 좋다고 결정했다. – justin

4

코어 이미지, 특히 CIColorPosterizeCIPixellate 필터를 사용할 수 있습니다. 코어 이미지는 GPU를 이용하고 수동으로 비트 맵을 조작하는 것보다 훨씬 빠르다는 이점이 있습니다. 당신이 당신에게 결과를주는 필터 값을 얻기 위해 /Developer/Applications/Graphics Tools에서 찾을 수있는 당신은 "코어 이미지 펀 하우스"응용 프로그램과 함께 놀러해야

NSURL* imageURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForImageResource:@"yourSourceImage"]]; 
CIImage* inputImage = [[CIImage alloc] initWithContentsOfURL:imageURL]; 

CIFilter* posterize = [CIFilter filterWithName:@"CIColorPosterize"]; 
[posterize setDefaults]; 
[posterize setValue:[NSNumber numberWithDouble:8.0] forKey:@"inputLevels"]; 
[posterize setValue:inputImage forKey:@"inputImage"]; 

CIFilter* pixellate = [CIFilter filterWithName:@"CIPixellate"]; 
[pixellate setDefaults]; 
[pixellate setValue:[NSNumber numberWithDouble:4.0] forKey:@"inputScale"]; 
[pixellate setValue:[posterize valueForKey:@"outputImage"] forKey:@"inputImage"]; 

CIImage* outputImage = [pixellate valueForKey:@"outputImage"]; 
[inputImage release]; 

//do something with outputImage 

:

간단한 예는 다음과 같을 것 필요. 당신은 코어 이미지가 아이폰 OS 5

+0

이 코드를 사용하려고하는데이 코드를 사용할 수 없습니다. 내 응용 프로그램이 IOS 4.3을 지원해야하므로 NSClassFromString을 사용하도록 약간 수정했습니다. 나는이 방법을 사용하고 있습니다 : http://pastebin.com/5hwb0xcr 내 이미지보기는 공백으로 남아 있지만 입력 된 CIImage를 UIImage로 다시 변환하려고하면 내 이미지보기에 원본 이미지가 표시됩니다. 어떤 아이디어? –

+1

Argh. 난 그냥 iOS 에서이 시도하고 문제의 두 필터는'nil'을 반환합니다. iOS 문서를 확인한 후, iOS에서 'CIColorPosterize'도 아니고 'CIPixellate'도 사용할 수 없다는 것을 발견했습니다. Mac 전용으로 보입니다. 이걸로 정원 경로를 안내해 주셔서 죄송합니다. iOS에는 Core Image 필터의 하위 집합 만 있다는 사실을 잊었습니다. –

+0

젠장, 내 자신의 이미지 처리 코드를 굴려야 할 것 같아. 답변을 주셔서 감사합니다. –

관련 문제