2010-11-28 5 views
1

iPad 용으로 작성한 응용 프로그램에 대한 프로그래밍 작업이 있는데이 작업을 수행하는 방법에 대한 설명서가 명확하지 않습니다. 나는이 문제에 접근하기위한 좋은 충고를 기대하고있다.iOS의 동적 이미지 렌더링

기본적으로 256x192 픽셀 이미지의 원시 RGB를 저장하는 메모리 버퍼가 있습니다. 이 이미지는 정기적으로 작성되며 업데이트 호출시 화면의 768x576 픽셀 영역에 표시하려고합니다. 나는 이것이 상대적으로 빠르며 아마도 실제로 변화하는 이미지의 영역만을 처리함으로써 최적화하고 싶습니다.

어떻게해야합니까? 내 생각은 256x192 이미지를 관리하는 CGBitmapContext를 만든 다음이 이미지에서 CGImage를 만든 다음 UIImage를 만들고 UIImageView 인스턴스의 이미지 속성을 변경하는 것입니다. 이것은 다소 느린 과정처럼 들립니다.

내가 바른 위치에 있는지, 아니면 다른 것을보고 있어야합니까? 또 다른 참고 사항은이 이미지가 다른 UIKit 뷰와 함께 화면에 존재해야한다는 것입니다.

도움을 주셔서 감사합니다.

답변

2

제 경험상 비트 맵 컨텍스트에서 이미지를 얻는 것은 실제로 매우 빠릅니다. 실제 성능이 떨어지면 드로잉 작업 자체가됩니다. 결과 이미지의 크기를 조절할 것이므로 최종 크기에서 비트 맵 컨텍스트를 만들고 시작으로 확장 된 모든 그림을 그리면 더 나은 결과를 얻을 수 있습니다.

그러나 비트 맵 컨텍스트를 사용하는 경우 CGBitmapContext은 RGB를 지원하지 않으므로 알파 채널 (RGBA 또는 ARGB)을 추가해야합니다.

1

그래, 나는 해결책을 내놓았다. 비트 맵 컨텍스트를 사용할 수 있다는 확신을 주신 Justin에게 감사드립니다.

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
CFDataRef data = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault, (UInt8*)screenBitmap, sizeof(UInt32)*256*192, kCFAllocatorNull); 
CGDataProviderRef provider = CGDataProviderCreateWithCFData(data); 
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB(); 

CGImageRef image = CGImageCreate(256, 192, 8, 32, sizeof(UInt32)*256, colourSpace, bitmapInfo, provider, 0, NO, kCGRenderingIntentDefault); 

CGColorSpaceRelease(colourSpace); 
CGDataProviderRelease(provider); 
CFRelease(data); 

self.image = [UIImage imageWithCGImage:image]; 

CGImageRelease(image); 

는 또한 screenBitmap 크기 256x192의 내 UINT32 배열하고, 자기가있는 UIImageView 파생 개체이므로주의 : 결국 나는 코드의이 비트를 사용했다. 이 코드는 잘 작동하지만 올바른 방법일까요?

+0

옙. CoreGraphics의 드로잉 기능이 필요 없다면, 그렇게 할 것이며, 완벽하게 맞습니다. –