2016-06-10 5 views
0

Используя следующий код, чтобы взять снимок из AGSMapViewПринимая снимок AGSMapView

Этот код устанавливается свойство kEAGLDrawablePropertyRetainedBacking, его нужно еще будет взять белый снимок.

let layer = self.AgsMapView.layer as! CAEAGLLayer 
     layer.drawableProperties = [ 
      kEAGLDrawablePropertyRetainedBacking: NSNumber(int: 1),          kEAGLDrawablePropertyColorFormat: kEAGLColorFormatRGBA8] 

код взять снимок

func snapshotForEAGLView() -> UIImage { 

     //glFlush() 
     var width: GLint = 0, height: GLint = 0 
     let scale: CGFloat = UIScreen.mainScreen().scale 
     let prevGLContext = EAGLContext.currentContext() 
glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_WIDTH), &width) 
     glGetRenderbufferParameteriv(GLenum(GL_RENDERBUFFER), GLenum(GL_RENDERBUFFER_HEIGHT), &height) 

     let dataLength = width * height * 4 
     let imageBytes = UnsafeMutablePointer<GLubyte>.alloc(Int(dataLength)) 

     glPixelStorei(GLenum(GL_PACK_ALIGNMENT), 4) 

     glReadPixels(0, 0, GLsizei(width), GLsizei(height), GLenum(GL_RGBA), GLenum(GL_UNSIGNED_BYTE), imageBytes) 

     let dataProvider = CGDataProviderCreateWithData(nil, imageBytes, Int(dataLength), nil) 

     EAGLContext.setCurrentContext(prevGLContext) 

     let colorSpace = CGColorSpaceCreateDeviceRGB() 
     if let imageRef = CGImageCreate(Int(width), Int(height), 8, 32, Int(width) * 4, colorSpace, [CGBitmapInfo.ByteOrder32Big, CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)], dataProvider, nil, true, CGColorRenderingIntent.RenderingIntentDefault) { 
      return UIImage(CGImage: imageRef, scale: scale, orientation: .DownMirrored) 
     } 
     return UIImage() 
    } 

В приложении мы AGSMapView на два контроллера, позволяет сказать Controller1 и Controller2, по нажатию кнопки на Controller1, Controller2 выталкивается.

Мы принимаем скриншот на Controller2, но иногда это занимает скриншот AGSMapView от Controller1

Это происходит случайно, есть ли способ, которым мы можем предоставить, какой вид взять скриншот или любым другим способом, чтобы избежать этого.

Любая помощь действительно ценится.

ответ

0

drawViewHierarchyInRect

работал, благодаря каждый

let size = CGSizeMake(viewWidth, viewHeight) 

    UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.mainScreen().scale) 

    let rec = CGRectMake(0, 0, viewWidth, viewHeight) 
    self.agsMapView.drawViewHierarchyInRect(rec, afterScreenUpdates: true) 

    let image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return image; 

 Смежные вопросы

  • Нет связанных вопросов^_^