본문 바로가기
연구하기/iOS App Dev

iOS 에서 raw 픽셀 데이터로부터 이미지 개체 생성하기 (2)

by 썰렁황제 2014. 5. 5.

이전에 한 번 이 부분에 대해서 다룬 적이 있었죠.

http://gcempire.tistory.com/470

여기서 말입니다.


iOS 6 로 업데이트 되면서 변경된 점이 있어 추가해 둡니다.

1. Core Graphics 사용

  이전에 작성한 글대로 사용하시면 됩니다. 따로 크게 바뀐 건 없는 듯.

2. Core Image 사용

  이게 크게 바뀌었습니다. 이전 방식대로 안해도 됩니다.

  생성법은 동일합니다.

CIImage *image = [CIImage imageWithBitmapData:dataImage bytesPerRow:imageWidth * 4 size:CGSizeMake(imageWidth, imageHeight) format:CIFormatF colorSpace:colorSpace];

imageWithBitmapData : raw image data, 즉 픽셀 단위의 이미지 데이터가 들어간 NSData 개체를 말합니다.

bytesPerRow : 이미지의 줄 당 바이트 개수. 이미지의 폭 * 픽셀 당 바이트 수로 계산하시면 됩니다. 좀 고전적이죠.

size : 이미지의 가로 세로 크기. CGSize 형식입니다.

format : 여기가 크게 바뀌었습니다. 기존의 kCIFormatRGBA, kCIFormatBGRA, kCIFormatRGBh 대신 kCIFormatARGB8, kCIFormatBGRA8, kCIFormatRGBA8, kCIFormatRGBAh 로 변경되었습니다. 채널 당 8비트 이미지 포맷임을 구분하기 위한 8이라는 접미사가 추가되었으며, 맥 OS 전용 상수로는 채널당 16비트 포맷을 지원하는 상수가 존재합니다. (kCIFormatRGBA16) 더불어 이전에 없어서 아쉬워했던 ARGB 규격이 추가되었습니다.

colorSpace : 색공간값. 이 부분에 대해서는 이전 문서 참조해 주세요. 일반적으로는 CGColorSpaceCreateDeviceRGB() 의 반환값을 사용하시면 됩니다.


  실 사용법에서도 크게 바뀌었는데요.

  UIImage 에서 iOS 5 에 새로 추가된 생성자로 CIImage 를 할당해 두어도, 실제로 UIImageView 등이나 기타 다른 것들을 통해 화면에 그리기를 시도할 경우 아무것도 그려지지 않았지만, iOS 6에 와서는 이제 이것이 정상 작동합니다. 즉, CIImage 로 생성된 UIImage 개체도 정상적으로 화면에 그려진다는 것이죠!

  따라서 과거와 같이 CIContext 를 이용하여 CGImage 를 만들고, 이를 이용해 UIImage 를 만드는 번거로운 작업 필요 없이 그냥 CIImage 를 이용해 그냥 UIImage 를 생성하면 됩니다.

  self.imageView.image = [UIImage imageWithCIImage:image];

  이렇게 하시면 됩니다.

  아주 간단해졌죠.

참고. GPUImage

  GPU 의 쉐이더를 활용해 이미지를 처리하는 방식입니다. iOS 기본 API 는 아니고요. 여기서 따로 설명은 드리지 않고 링크만 첨부합니다.

  링크는 여기 : https://github.com/BradLarson/GPUImage


* 잘못된 점 있으면 언제든지 지적 부탁드립니다.


반응형