iphone – 为什么这个GLView截图代码返回空白/黑色UIImage?
发布时间:2020-12-14 19:06:56 所属栏目:百科 来源:网络整理
导读:我使用以下代码截取GLView中的像素截图.问题是,它返回一个完全黑色的UI Image.这个代码是在LineDrawer.m中调用的,它是GLView代码的核心 – 所以它是从右边的.m文件中调用的.如何保存实际屏幕截图而不是黑色图像? - (UIImage*) getGLScreenshot {NSLog(@"1")
我使用以下代码截取GLView中的像素截图.问题是,它返回一个完全黑色的UI
Image.这个代码是在LineDrawer.m中调用的,它是GLView代码的核心 – 所以它是从右边的.m文件中调用的.如何保存实际屏幕截图而不是黑色图像?
- (UIImage*) getGLScreenshot { NSLog(@"1"); float scale = 0.0; if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { // scale value should be 1.0 on 3G and 3GS,and 2.0 on iPhone 4. scale = [[UIScreen mainScreen] scale]; } // these are swapped since the screen is rotatey float h = 768 * scale; float w = 924 * scale; NSInteger myDataLength = w * h * 4; // allocate array and read pixels into it. GLubyte *buffer = (GLubyte *) malloc(myDataLength); glReadPixels(0,w,h,GL_RGBA,GL_UNSIGNED_BYTE,buffer); // gl renders "upside down" so swap top to bottom into new array. // there's gotta be a better way,but this works. GLubyte *buffer2 = (GLubyte *) malloc(myDataLength); for(int y = 0; y <h; y++) { for(int x = 0; x <w * 4; x++) { buffer2[(((int)h-1) - y) * (int)w * 4 + x] = buffer[y * 4 * (int)w + x]; } } // make data provider with data. CGDataProviderRef provider = CGDataProviderCreateWithData(NULL,buffer2,myDataLength,NULL); // prep the ingredients int bitsPerComponent = 8; int bitsPerPixel = 32; int bytesPerRow = 4 * w; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; // make the cgimage CGImageRef imageRef = CGImageCreate(w,bitsPerComponent,bitsPerPixel,bytesPerRow,colorSpaceRef,bitmapInfo,provider,NULL,NO,renderingIntent); // then make the uiimage from that UIImage *myImage = [UIImage imageWithCGImage:imageRef]; return myImage; } - (void)saveGLScreenshotToPhotosAlbum { UIImageWriteToSavedPhotosAlbum([self getGLScreenshot],nil,nil); } 解决方法
我不得不在麻雀框架中做类似的事情,不久之前,你应该能够从这个论坛回复的代码中提取你需要的部分:
http://forum.sparrow-framework.org/topic/spdisplayobjectscreenshot 编辑:也是这篇文章http://forum.sparrow-framework.org/topic/taking-screenshots (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |