2009-07-03 4 views
1

포인터가 데이터 인 경우 iphone 응용 프로그램에서 생성 한 이미지를 가리 킵니다. CGBitmapContextCreate를 사용하여이 데이터의 사본을 만들거나 "현재 위치"의 이미지를 사용하는 경우 지금 누구입니까?iphone : 새 메모리를 할당하지 않고 이미지 생성

이상적으로, 데이터의 정보를 다시 사용하고 싶습니다. *이 이미지의 추가 사본을 만들지는 마십시오.

void* data = <my data>; 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef imageContext = CGBitmapContextCreate(data, w, h, 8, w*8, colorSpace, kCGBitmapByteOrder32Big|kCGImageAlphaPremultipliedLast); 
CGImageRef imageRef = CGBitmapContextCreateImage(imageContext); 
UIImage* image =[[UIImage alloc] initWithCGImage:imageRef]; 

더 일반적으로 이미지를 만드는이 방법은 나에게 복잡하게 보입니다. 아무도 여기서 무슨 일이 일어나고 있는지 아는 사람이 있습니까? UIImage를 만드는 더 쉬운 방법이 있습니까?

감사

답변

1

어떻게 이런 일에 대해 : here에서

void * data = <my data>; 
NSData * newData = [NSData dataWithBytesNoCopy:data length:lengthOfData]; 
UIImage * image = [[UIImage alloc] initWithData:newData]; 
+2

- [UIImage initWithData]는 이미지 데이터를 디코딩하고 그 과정에서 사본을 만듭니다. 메모리를 할당하지 않고 이미지를 생성하려면 iPhone에서 copy-on-write를 지원하는 픽셀 형식으로 데이터를 미리 디코딩하고 CGBitmapContextCreate를 사용하는 것이 유일한 방법입니다. – rpetrich

+0

사실 제대로 작동하지 않습니다 ... 어떻게해야합니까? UIImage에 형식 및 크기 정보를 전달합니까? 확실하게 뭔가가 빠져 있습니다. –

2

그것은 단지 당신이 전달 된 메모리를 사용합니다 CGBitmapContextCreate처럼 보이지만 데이터는 CGBitmapContextCreateImage,

에 대한 호출에 의해 복사 할 수 있습니다.

애플 문서 :

찰 C GImage 객체가 에 의해 반환 된 CGBitmapContextCreateImage는 복사 작업에 의해 생성됩니다. 비트 맵 그래픽 컨텍스트 에 대한 이후 변경 사항은 반환 된 이미지의 내용에 영향을주지 않습니다. 어떤 경우 에서 복사 작업이 실제로 는 복사 (copy-on-write) 시맨틱은 비트들의 실제 물리적 카피 비트 맵 그래픽 콘텍스트에서 기본 데이터 가 이 변경되었을 경우에만 발생되도록 따른다. 결과적으로 결과 이미지를 사용하고 비트 맵 을 추가 드로잉을 수행하기 전에 해제하여 그래픽 컨텍스트에 배치 할 수 있습니다. 이 방법으로 데이터의 실제 사본을 피할 수 있습니다.

관련 문제