iOS récupère différents pixels dans la comparaison pixel par pixel de UIImages

J'essaie de faire une comparaison pixel par pixel de deux UIImages et j'ai besoin de récupérer les pixels qui sont différents. En utilisant ce hash Générer à partir de UIImage, j'ai trouvé un moyen de générer un hachage pour un UIImage. Existe-t-il un moyen de comparer les deux hachages et de récupérer les différents pixels?

Si vous voulez réellement récupérer la différence, le hachage ne peut pas vous aider. Vous pouvez utiliser le hachage pour détecter la présence probable de différences, mais pour get les différences réelles, vous devez utiliser d'autres techniques.

Par exemple, pour créer un UIImage qui consiste en la différence entre deux images, voir cette réponse acceptée dans laquelle Cory Kilgor illustre l'utilisation de CGContextSetBlendMode avec un mode de kCGBlendModeDifference de kCGBlendModeDifference :

 + (UIImage *) differenceOfImage:(UIImage *)top withImage:(UIImage *)bottom { CGImageRef topRef = [top CGImage]; CGImageRef bottomRef = [bottom CGImage]; // Dimensions CGRect bottomFrame = CGRectMake(0, 0, CGImageGetWidth(bottomRef), CGImageGetHeight(bottomRef)); CGRect topFrame = CGRectMake(0, 0, CGImageGetWidth(topRef), CGImageGetHeight(topRef)); CGRect renderFrame = CGRectIntegral(CGRectUnion(bottomFrame, topFrame)); // Create context CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); if(colorSpace == NULL) { printf("Error allocating color space.\n"); return NULL; } CGContextRef context = CGBitmapContextCreate(NULL, renderFrame.size.width, renderFrame.size.height, 8, renderFrame.size.width * 4, colorSpace, kCGImageAlphaPremultipliedLast); CGColorSpaceRelease(colorSpace); if(context == NULL) { printf("Context not created!\n"); return NULL; } // Draw images CGContextSetBlendMode(context, kCGBlendModeNormal); CGContextDrawImage(context, CGRectOffset(bottomFrame, -renderFrame.origin.x, -renderFrame.origin.y), bottomRef); CGContextSetBlendMode(context, kCGBlendModeDifference); CGContextDrawImage(context, CGRectOffset(topFrame, -renderFrame.origin.x, -renderFrame.origin.y), topRef); // Create image from context CGImageRef imageRef = CGBitmapContextCreateImage(context); UIImage * image = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); CGContextRelease(context); return image; }