SDL 在 iOS 上保存屏幕截图
SDL save screenshot on iOS
我正在尝试将来自 SDL "window" 的屏幕或帧保存到 PNG 文件中,因此我正在使用 SDL_image library。我的代码如下
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
没有保存。如果有人可以领导或帮助我。谢谢!
附加代码,保存的图像只是黑色
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)")
}
它不会给你截图中的视频帧。它只会在您播放视频时给您黑屏图像。
请尝试截取您应用的任何屏幕截图,看看它是否正常工作。
我能够保存来自 SDL_window 的屏幕截图。首先,我创建一个 PNG 表示文件,如
let image = UIImage()
let data = UIImagePNGRepresentation(image)
try data?.write(to: fileUrl)
然后调用 IMG_SavePNG() 方法
我正在尝试将来自 SDL "window" 的屏幕或帧保存到 PNG 文件中,因此我正在使用 SDL_image library。我的代码如下
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
没有保存。如果有人可以领导或帮助我。谢谢!
附加代码,保存的图像只是黑色
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)")
}
它不会给你截图中的视频帧。它只会在您播放视频时给您黑屏图像。
请尝试截取您应用的任何屏幕截图,看看它是否正常工作。
我能够保存来自 SDL_window 的屏幕截图。首先,我创建一个 PNG 表示文件,如
let image = UIImage()
let data = UIImagePNGRepresentation(image)
try data?.write(to: fileUrl)
然后调用 IMG_SavePNG() 方法