gpt4 book ai didi

ios - iOS通过UIImage的像素比较来检索像素中的不同像素

转载 作者:行者123 更新时间:2023-12-01 18:19:17 24 4
gpt4 key购买 nike

我正在尝试对两个UIImage进行逐像素比较,并且需要检索不同的像素。使用此Generate hash from UIImage,我找到了一种为UIImage生成哈希的方法。有没有一种方法可以比较两个哈希值并检索不同的像素?

最佳答案

如果您想实际获取差异,则哈希无法帮助您。您可以使用散列来检测差异的可能存在,但是要获取实际差异,则必须使用其他技术。

例如,要创建由两个图像之间的差异组成的UIImage,请参阅this accepted answer,其中Cory Kilgor的插图说明了CGContextSetBlendModekCGBlendModeDifference混合模式的使用:

+ (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;
}

关于ios - iOS通过UIImage的像素比较来检索像素中的不同像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com