Почему этот код скриншота GLView возвращает пустой / черный UIImage?

Я использую следующий код, чтобы сделать снимок экрана из пикселей в GLView . Проблема в том, что он возвращает полностью черный UIImage . Этот код вызывается в 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, 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, h, 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, nil); } 

2 Solutions collect form web for “Почему этот код скриншота GLView возвращает пустой / черный UIImage?”

Я должен был сделать что-то подобное в Sparrow Framework некоторое время назад, вы должны убрать части, которые вам нужны, из кода в этом форуме: http://forum.sparrow-framework.org/topic/spdisplayobjectscreenshot

EDIT: Также этот пост http://forum.sparrow-framework.org/topic/taking-screenshots

Изменение доступных свойств

eaglLayer.drawableProperties = [Словарь NSDictionaryWithObjectsAndKeys:

  [NSNumber numberWithBool:YES], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGB565, kEAGLDrawablePropertyColorFormat, nil]; 

kEAGLDrawablePropertyRetainedBacking to YES

  • Многозначный адрес адресной книги iphone
  • Переименование проекта iOS в Xcode изменяет устройство на «Мой Mac»,
  • xcode 7.3: Не удалось вставить новое выходное соединение и удалить DerivedData не работает
  • Исходный код запуска iOS не запущен
  • вложенная анимация push может привести к повреждению панели предупреждения
  • Безопасно ли условно кодировать iOS 6 и 7, вызывая + класс?
  • Невидимое изображение в раскадровке
  • Сбой при совместном использовании Pintrest в ios
  • Могу ли я изменить ориентацию клавиатуры?
  • Xcode не смог запустить приложение (не удалось подключиться)
  • Не удалось найти изображение для разработчиков. IOS 9.1 & Xcode Version 7.0.1 (7A1001)
  • Interesting Posts

    Как заставить спрайт двигаться в синусоидальном в cocos2d?

    Определить тип MIME из NSData?

    Воспроизведение звука HTML5 без остановки звука iTunes на iPhone

    Swift: Наследование протоколов @objc создает segfault. Как создать наследуемые протоколы с дополнительными переменными и функциями?

    Какое максимальное количество разрешений категорииBitMask разрешено в Sprite Kit?

    Как получить CGPoint (ы) CGPath

    Повторное открытие приложения iOS через Url-схему – сохранение состояния

    Обнаруживать, когда представленный диспетчер просмотра отклонен

    Экспорт CoreAnimation в видеофайл

    Есть ли способ объединить несколько фреймворков в единую единую структуру в iOS?

    iOS 5 и iOS 6 – разница в поведении UIWebView

    iOS8 Safari -webkit-overflow-scrolling: touch; вопрос

    tableView скрывается из-за gestureRecognizer, прежде чем он сможет выполнить didSelectRowAtIndexPath

    Linkedin – iOS – обнаружение пользователя отменить логин

    Применение части текстуры (лист спрайта / текстуры) для точечного спрайта в iOS OpenGL ES 2.0

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.