Take correctly sized screenshots with ScreenCaptureKit

I've been using CGWindowListCreateImage which automatically creates an image with the size of the captured window.

But SCScreenshotManager.captureImage(contentFilter:configuration:) always creates images with the width and height specified in the provided SCStreamConfiguration. I could be setting the size explicitly by reading SCWindow.frame or SCContentFilter.contentRect and multiplying the width and height by SCContentFilter.pointPixelScale , but it won't work if I want to keep the window shadow with SCStreamConfiguration.ignoreShadowsSingleWindow = false.

Is there a way and what's the best way to take full-resolution screenshots of the correct size?

import Cocoa
import ScreenCaptureKit

class ViewController: NSViewController {

    @IBOutlet weak var imageView: NSImageView!
    
    override func viewDidAppear() {
        imageView.imageScaling = .scaleProportionallyUpOrDown
        view.wantsLayer = true
        view.layer!.backgroundColor = .init(red: 1, green: 0, blue: 0, alpha: 1)
        Task {
            let windows = try await SCShareableContent.excludingDesktopWindows(false, onScreenWindowsOnly: true).windows
            let window = windows[0]
            let filter = SCContentFilter(desktopIndependentWindow: window)
            let configuration = SCStreamConfiguration()
            configuration.ignoreShadowsSingleWindow = false
            configuration.showsCursor = false
            configuration.width = Int(Float(filter.contentRect.width) * filter.pointPixelScale)
            configuration.height = Int(Float(filter.contentRect.height) * filter.pointPixelScale)
            print(filter.contentRect)
            let windowImage = try await SCScreenshotManager.captureImage(contentFilter: filter, configuration: configuration)
            imageView.image = NSImage(cgImage: windowImage, size: CGSize(width: windowImage.width, height: windowImage.height))
        }
    }

}
Answered by DTS Engineer in 807305022

There's no supported way for you to calculate the window shadow's frame with the APIs currently available. If you'd like us to consider adding the necessary functionality, please file an enhancement request using Feedback Assistant. Once you file the request, please post the FB number here.

If you're not familiar with how to file enhancement requests, take a look at Bug Reporting: How and Why?

There's no supported way for you to calculate the window shadow's frame with the APIs currently available. If you'd like us to consider adding the necessary functionality, please file an enhancement request using Feedback Assistant. Once you file the request, please post the FB number here.

If you're not familiar with how to file enhancement requests, take a look at Bug Reporting: How and Why?

There's no supported way for you to calculate the window shadow's frame with the APIs currently available. If you'd like us to consider adding the necessary functionality, please file an enhancement request using Feedback Assistant.

Thanks, I filed FB15370384.

Take correctly sized screenshots with ScreenCaptureKit
 
 
Q