I need to crop an image to a circle in my Xamarin app.
This is platform-dependent, so it’d have to use the UIKit.
I’ve found the following Swift code (credit Cut a UIImage into a circle):
extension UIImage {
var isPortrait: Bool { size.height > size.width }
var isLandscape: Bool { size.width > size.height }
var breadth: CGFloat { min(size.width, size.height) }
var breadthSize: CGSize { .init(width: breadth, height: breadth) }
var breadthRect: CGRect { .init(origin: .zero, size: breadthSize) }
var circleMasked: UIImage? {
guard let cgImage = cgImage?
.cropping(to: .init(origin: .init(x: isLandscape ? ((size.width-size.height)/2).rounded(.down) : 0,
y: isPortrait ? ((size.height-size.width)/2).rounded(.down) : 0),
size: breadthSize)) else { return nil }
let format = imageRendererFormat
format.opaque = false
return UIGraphicsImageRenderer(size: breadthSize, format: format).image { _ in
UIBezierPath(ovalIn: breadthRect).addClip()
UIImage(cgImage: cgImage, scale: format.scale, orientation: imageOrientation)
.draw(in: .init(origin: .zero, size: breadthSize))
}
}
}
Could you help me convert it into UIKit C#?
Thanks!
P.S. There were no relevant replies, so to the best of my abilities I’ve put together a version that works. See that below.
2
Answers
There were no relevant replies, so to the best of my abilities I've put together a version that works:
(The reason I've used a layer for circular cropping is I don't know how to attach UIBezierPath to the context).
For a circular image I recommend using – FFImageLoading
else trough xaml: