Add freehand drawing and fix residual capture pixelation
The screenshot window now supports toggling a pen to draw annotations
that are flattened into copied and saved images. Captures are also
cropped with a pixel-exact CGImage.cropping instead of a CGContext
redraw, removing residual blur on retina displays.
💘 Generated with Crush
Assisted-by: Crush:deepseek-v4-flash-0731
This commit is contained in:
@@ -134,15 +134,11 @@ final class ScreenCapture {
|
||||
// display's frame (e.g. secondary monitor coordinate quirks).
|
||||
let safeRect = pxRect.intersection(CGRect(x: 0, y: 0, width: CGFloat(image.width), height: CGFloat(image.height)))
|
||||
guard safeRect.width >= 1, safeRect.height >= 1 else { return nil }
|
||||
guard let cropCtx = CGContext(
|
||||
data: nil, width: Int(safeRect.width), height: Int(safeRect.height),
|
||||
bitsPerComponent: 8, bytesPerRow: 0,
|
||||
space: CGColorSpaceCreateDeviceRGB(),
|
||||
bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue
|
||||
) else { return nil }
|
||||
cropCtx.interpolationQuality = .high
|
||||
cropCtx.draw(image, in: CGRect(x: -safeRect.minX, y: -safeRect.minY, width: CGFloat(image.width), height: CGFloat(image.height)))
|
||||
return cropCtx.makeImage()
|
||||
// Use a pixel-exact subimage crop instead of redrawing through a
|
||||
// CGContext, which resamples and loses quality on retina captures.
|
||||
let rounded = safeRect.integral
|
||||
guard rounded.width >= 1, rounded.height >= 1 else { return nil }
|
||||
return image.cropping(to: rounded)
|
||||
}
|
||||
|
||||
@available(macOS 14.0, *)
|
||||
|
||||
Reference in New Issue
Block a user