2009-06-07 4 views
3

이 문제로 인해 지금 당분간 어려움을 겪고 있으며 지금까지 답변을 찾을 수 없습니다. 기본적으로, 내가하고 싶은 것은 내 EAGLview의 내용을 캡처 한 다음 다른 이미지와 병합하는 것입니다. 어쨌든, 주요 문제점은 포토 앨범에 저장하거나 UIImageView에 넣을 때 내 EAGLview의 모든 것이 투명하게 렌더링된다는 것입니다.iPhone에서 알파 채널을 사용하여 EAGLview 콘텐츠를 캡처하는 경우

- (CGImageRef) glToUIImage { 
unsigned char buffer[320*480*4]; 
glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer); 
CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer, 320*480*4, NULL); 
CGImageRef iref = CGImageCreate(320,480,8,32,320*4,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault); 

size_t width   = CGImageGetWidth(iref); 
size_t height  = CGImageGetHeight(iref); 
size_t length  = width*height*4; 
uint32_t *pixels  = (uint32_t *)malloc(length); 
CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width*4, CGImageGetColorSpace(iref), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
CGContextTranslateCTM(context, 0.0, height); 
CGContextScaleCTM(context, 1.0, -1.0); 
CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), iref); 
CGImageRef outputRef = CGBitmapContextCreateImage(context); 
UIImage *outputImage = [UIImage imageWithCGImage:outputRef]; 

UIImageWriteToSavedPhotosAlbum(outputImage, nil, nil, nil); 
return outputRef; 

}

이미 언급 한 바와 같이

, 이것은 완벽하게 내 EAGLview의 내용을 잡고 있지만, 나는 그것의 알파 값을 사용하여 이미지를 얻을 수 없습니다 : 내가 당신과 함께 몇 가지 코드를 공유 할 수, 나는 다른 곳에서 발견 .

도움을 주시면 감사하겠습니다. 감사!

+0

안녕하세요, 동일한 문제가 있습니다. 이것을 알아낼 수 있었습니까? 고맙습니다 – Sharief

답변

2

두 곳 나는 당신이 당신의 투명성을 잃고 될 수 있음을 알 수는 :

  1. 당신이 당신의 장면을 그리기있어 : 장면은 투명한 배경이 있습니까? (0,0,0,1)이 아닌 (0, 0, 0, 0)과 같은 glClear를 사용하고 있는지 확인하십시오.
  2. 이미지를 뒤집어 그 위에 뒤집을 때 : 기본 배경색은 무엇입니까? 투명하지 않은 검정색 일 가능성이 높으며 장면의 투명한 부분이있는 곳으로 끝날 것입니다.

# 2 당신이 그것을 뒤집어하기 전에 이미지를 저장하여 문제가,하고 있는지, 당신이 코어를 버퍼링하여 픽셀 단위로 메모리를 틀지 않고 직접 사용하여 처리를 반전을 통해 피할 수 있는지 확인할 수 있습니다 그래픽 호출.