, , , , - , . , , , , ( , 32 UInt32, , , RGBA, ), , - , Quartz Mac, , iOS UIKit , , ( X). ; , .
func difference(leftImage: UIImage, rightImage: UIImage) {
let width = Int(leftImage.size.width)
let height = Int(leftImage.size.height)
guard leftImage.size == rightImage.size else {
return
}
if let cfData1:CFData = leftImage.cgImage?.dataProvider?.data,
let l = CFDataGetBytePtr(cfData1),
let cfData2:CFData = rightImage.cgImage?.dataProvider?.data,
let r = CFDataGetBytePtr(cfData2) {
let bytesPerpixel = 4
let firstPixel = 0
let lastPixel = (width * height - 1) * bytesPerpixel
let range = stride(from: firstPixel, through: lastPixel, by: bytesPerpixel)
for pixelAddress in range {
if l.advanced(by: pixelAddress).pointee != r.advanced(by: pixelAddress).pointee ||
l.advanced(by: pixelAddress + 1).pointee != r.advanced(by: pixelAddress + 1).pointee ||
l.advanced(by: pixelAddress + 2).pointee != r.advanced(by: pixelAddress + 2).pointee ||
l.advanced(by: pixelAddress + 3).pointee != r.advanced(by: pixelAddress + 3).pointee {
print(pixelAddress)
}
}
}
}
, , . , ( 0,0,0,0) , . , - . , , , , ( , ).