首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS上保存屏幕截图

在iOS上保存屏幕截图
EN

Stack Overflow用户
提问于 2018-04-06 11:13:14
回答 2查看 220关注 0票数 5

我正在尝试将屏幕或帧从SDL的“窗口”保存到PNG文件中,所以我使用了图像库。我的代码在下面

代码语言:javascript
复制
IMG_Init(Int32(IMG_INIT_PNG.rawValue))
let screenShot = SDL_CreateRGBSurface(0, 640, 480, 32, 0, 0, 0, 0)
SDL_SetRenderTarget(renderer, texture)
SDL_RenderReadPixels(renderer, nil, Uint32(SDL_PIXELFORMAT_ARGB8888), screenShot?.pointee.pixels, (screenShot?.pointee.pitch)!)
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
IMG_SavePNG(screenShot, "\(documentsPath)/image.png")
SDL_FreeSurface(screenShot)

但是image.png没有被保存。如果有人能领导或帮助我。谢谢!

附加代码,保存的图像是黑色的。

代码语言:javascript
复制
IMG_Init(Int32(IMG_INIT_PNG.rawValue))
let screenShot = SDL_CreateRGBSurface(Uint32(SDL_SWSURFACE), 640, 480, 32, 0, 0, 0, 0)
// SDL_SetRenderTarget(renderer, texture)
SDL_RenderReadPixels(renderer, nil, Uint32(SDL_PIXELFORMAT_ARGB8888), screenShot?.pointee.pixels, (screenShot?.pointee.pitch)!)
// Save to documents directory
let fileManager = FileManager.default
do {
    let documentDirectory = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
    let fileUrl = documentDirectory.appendingPathComponent("imageLOL.png")
    if !fileManager.fileExists(atPath: fileUrl.path) {
        print("File NO exists")
        // Create file at path
        let data = Data()
        let createFile = fileManager.createFile(atPath: fileUrl.path, contents: data, attributes: nil)
        if createFile {
            print("Create file success")
        } else {
            print("Create file failed")
        }
    } else {
        print("File exists")

    }
    let result = IMG_SavePNG(screenShot, fileUrl.path)
    print("result = \(result)")
    // After saving screenshot
    let image = UIImage(contentsOfFile: fileUrl.path)
    let imageData = UIImagePNGRepresentation(image!)
    print("image length = \(String(describing: imageData?.count))")
    UIImageWriteToSavedPhotosAlbum(image!, nil, nil, nil)
    SDL_FreeSurface(screenShot)
} catch {
    print("Error docs = \(error)")
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-12 06:39:20

我能够从SDL_window中保存截图。首先,我创建一个PNG表示文件,如下所示

代码语言:javascript
复制
let image = UIImage()
let data = UIImagePNGRepresentation(image)
try data?.write(to: fileUrl)

然后调用IMG_SavePNG()方法

票数 2
EN

Stack Overflow用户

发布于 2018-04-08 13:39:35

它不会给你屏幕截图中的视频帧。只有在播放视频时,它才会给你提供黑色屏幕图像。

请试着把你的任何一个应用程序的屏幕截图,看看它是否工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49691514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档