Skip to content

Commit bd9f5b6

Browse files
evil159github-actions[bot]
authored andcommitted
Address potential duplicate initialization in Image.swift (#7586)
Addresses: https://mapbox.atlassian.net/browse/MAPSIOS-1893 cc @mapbox/maps-ios GitOrigin-RevId: a02524eb498879eeb1aaf52cf7c3f2964dfd5898
1 parent b837ea1 commit bd9f5b6

File tree

1 file changed

+20
-21
lines changed

1 file changed

+20
-21
lines changed

Sources/MapboxMaps/Foundation/Extensions/Image.swift

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,21 @@ private extension Data {
3030

3131
let resultSizeInBytes = 4 * cgImage.height * cgImage.width
3232

33-
if CFDataGetLength(data) == resultSizeInBytes {
34-
switch cgImage.alphaInfo {
35-
case .premultipliedLast:
36-
// Fast path, use existing image data.
37-
// Handles for most PNG images.
38-
self.init(referencing: data)
39-
case .noneSkipLast:
40-
// RGBX, handles most JPEG images.
41-
self.init(convertingImageData: data, alphaFirst: false)
42-
case .noneSkipFirst:
43-
// XRGB
44-
self.init(convertingImageData: data, alphaFirst: true)
45-
default: break
46-
}
33+
switch (cgImage.alphaInfo, CFDataGetLength(data) == resultSizeInBytes) {
34+
case (.premultipliedLast, true):
35+
// Fast path, use existing image data.
36+
// Handles for most PNG images.
37+
self.init(referencing: data)
38+
case (.noneSkipLast, true):
39+
// RGBX, handles most JPEG images.
40+
self.init(convertingImageData: data, alphaFirst: false)
41+
case (.noneSkipFirst, true):
42+
// XRGB
43+
self.init(convertingImageData: data, alphaFirst: true)
44+
default:
45+
// Handles all other cases, such as code-generated images, monochrome images.
46+
self.init(drawing: cgImage)
4747
}
48-
49-
// Handles all other cases, such as code-generated images, monochrome images.
50-
self.init(drawing: cgImage)
5148
}
5249

5350
init?(convertingImageData: NSData, alphaFirst: Bool) {
@@ -64,16 +61,18 @@ private extension Data {
6461

6562
// TODO: measure performance, use Accelerate
6663
if alphaFirst {
64+
// Convert XRGB to RGBA: [X, R, G, B] → [R, G, B, 255]
6765
for i in stride(from: 0, to: length, by: 4) {
68-
ptr[i] = ptr[i + 1]
69-
ptr[i + 1] = ptr[i + 2]
70-
ptr[i + 2] = ptr[i + 3]
66+
ptr[i] = ptr[i + 1] // R
67+
ptr[i + 1] = ptr[i + 2] // G
68+
ptr[i + 2] = ptr[i + 3] // B
69+
ptr[i + 3] = 255 // A (opaque)
7170
}
7271
} else {
72+
// Convert RGBX to RGBA: [R, G, B, X] → [R, G, B, 255]
7373
for i in stride(from: 0, to: length, by: 4) {
7474
ptr[i + 3] = 255
7575
}
76-
7776
}
7877
self.init(referencing: mutableData)
7978
}

0 commit comments

Comments
 (0)