@@ -151,7 +151,7 @@ extension CGImage {
151
151
// MARK: Trim Transparent Pixels
152
152
153
153
/// A context for handling transparency data in an image.
154
- private final class TransparencyContext {
154
+ private struct TransparencyContext : ~ Copyable {
155
155
private let image : CGImage
156
156
private let maxAlpha : UInt8
157
157
private let cgContext : CGContext
@@ -243,7 +243,7 @@ extension CGImage {
243
243
}
244
244
}
245
245
246
- private func isPixelOpaque( column : Int , row : Int ) -> Bool {
246
+ private func isPixelOpaque( row : Int , column : Int ) -> Bool {
247
247
guard let bitmapData = cgContext. data else {
248
248
return false
249
249
}
@@ -261,18 +261,17 @@ extension CGImage {
261
261
if memcmp ( rowByteBlock, zeroByteBlock, image. width) == 0 {
262
262
return true
263
263
}
264
- // We found a non-zero row. Check each pixel's alpha until we find one
265
- // that is "opaque".
264
+ // We found a non-zero row. Check each pixel until we find one that is opaque.
266
265
return columnRange. contains { column in
267
- isPixelOpaque ( column : column , row : row )
266
+ isPixelOpaque ( row : row , column : column )
268
267
}
269
268
}
270
269
}
271
270
272
271
private func firstOpaqueColumn< S: Sequence > ( in columnRange: S ) -> Int ? where S. Element == Int {
273
272
columnRange. first { column in
274
273
rowRange. contains { row in
275
- isPixelOpaque ( column : column , row : row )
274
+ isPixelOpaque ( row : row , column : column )
276
275
}
277
276
}
278
277
}
@@ -289,7 +288,7 @@ extension CGImage {
289
288
around edges: Set < CGRectEdge > = [ . minXEdge, . maxXEdge, . minYEdge, . maxYEdge] ,
290
289
maxAlpha: CGFloat = 0
291
290
) -> CGImage ? {
292
- let maxAlpha = min ( UInt8 ( maxAlpha * 255 ) , 255 )
291
+ let maxAlpha = UInt8 ( maxAlpha. clamped ( to : 0 ... 1 ) * 255 )
293
292
let context = TransparencyContext ( image: self , maxAlpha: maxAlpha)
294
293
return context? . trim ( edges: edges)
295
294
}
0 commit comments