2012-10-01 6 views
0

CGBitmapContextCreateCGContextDrawImage을 사용하여 화면에 RGBA 데이터를 그립니다. 내가 malloc에 (pixelBuffer, ...)을 사용하여 bitmapcontext을 만들고 거기에 데이터를 배치하려고하면이 작업이 정상적으로 작동합니다.CGBitmapContextGetData - 반환 된 메모리 블록에 데이터를 복사 할 수 없습니다.

그러나, 나는 자신의 메모리를 관리하는 코어 그래픽 싶습니다 그래서 CGBitmapContextCreateNULL을 통과 한 다음 CGBitmapContextGetData를 호출하고 사용하여 상기 블록 내 RGBA 버퍼를 복사하여 사용되는 메모리 블록에 대한 포인터를 좀하고 싶습니다 memcpy. 그러나 내 memcpy이 실패합니다. 아래 내 코드를 참조하십시오. 내가 뭘 잘못하고 있는지 알기!

gtx = CGBitmapContextCreate(NULL, screenWidth, screenHeight, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaNoneSkipLast); 
void *data = CGBitmapContextGetData(gtx); 
memcpy(data, pixelBuffer, area*componentsPerPixel); 
CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
CGImageRef image = CGBitmapContextCreateImage(gtx); 
CGContextTranslateCTM(currentContext, 0, screenHeight); 
CGContextScaleCTM(currentContext, 1.0, -1.0); 
CGContextDrawImage(currentContext, currentSubrect, image); 
+0

자신의 포인터를 전달하면 그걸 고수하지 않으시겠습니까? – nielsbot

+0

null을 전달하는 것이 더 최적이라고 생각합니다. 드로잉 성능이 향상 될 수 있습니다. (이는 내 앱에 많은 영향을 미칩니다.) 더 중요한 점은, vm_copy가 실패하여 앱이 다운되는 경우가 종종 있습니다. 내 포인터 (내 직감)를 전달하는 것과 관련이 있다고 생각합니다. –

+0

좋아, memcpy 오류가 무엇입니까? – nielsbot

답변

0

자주/반복 그릴의 drawRect를 사용하여, 내 모든 연구를 바탕으로 SO question

가 여기에 또 다른입니다 나는이 다른 응답에 제안, UIImageView에 기반 도면을 이동하기로 결정 그래서 나쁜 생각 그래서 UIImageView가 drawrect보다 더 효율적인 이유에 대한 답.

위의 내용을 바탕으로, 나는 drawrect 대신 UIImageView를 사용하고 있으며 드로잉 성능이 좋아졌습니다.