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
它是隨機發生的,是有其合理把握截圖或任何其他方式來避免這種情況的任何方式,使我們可以提供。
任何幫助,非常感謝,很多。