gpt4 book ai didi

iphone - CGContextDrawImage 跨设备的字节值不一致?

转载 作者:行者123 更新时间:2023-11-28 22:44:01 26 4
gpt4 key购买 nike

我正在尝试比较两个图像(实际上是在较大的图像中找到较小的“子图像”),并且我正在使用下面提供的方法加载图像。

下面的代码现在包含一个测试 for 循环,它总结了所有单独的字节值。我发现这个总和和因此字节数不同,这取决于它正在运行的设备。我的问题是为什么会这样?

// Black and white configuration:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
NSUInteger bytesPerPixel = 1;
NSUInteger bitsPerComponent = 8;
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;

// Image
CGImageRef imageRef = [[UIImage imageNamed:@"image.jpg"] CGImage];
NSUInteger imageWidth = CGImageGetWidth(imageRef);
NSUInteger imageHeight = CGImageGetHeight(imageRef);
NSUInteger imageSize = imageHeight * imageWidth * bytesPerPixel;
NSUInteger imageBytesPerRow = bytesPerPixel * imageWidth;

unsigned char *imageRawData = calloc(imageSize, sizeof(unsigned char));
CGContextRef imageContext = CGBitmapContextCreate(imageRawData, imageWidth, imageHeight, bitsPerComponent,
imageBytesPerRow, colorSpace, bitmapInfo);

// Draw the actual image to the bitmap context
CGContextDrawImage(imageContext, CGRectMake(0, 0, imageWidth, imageHeight), imageRef);
CGContextRelease(imageContext);


NSUInteger sum = 0;
for (int byteIndex = 0; byteIndex < imageSize; byteIndex++)
{
sum += imageRawData[byteIndex];
}

NSLog(@"Sum: %i", sum); // Output on simulator: Sum: 18492272
// Output on iPhone 3GS: Sum: 18494036
// Output on another 3GS: Sum: 18494015
// Output on iPhone 4: Sum: 18494015


free(imageRawData);
CGColorSpaceRelease(colorSpace);

最佳答案

所有设备都运行相同版本的操作系统吗?另一种可能性(除了有人已经提到的色彩空间之外)是 JPG 解码库可能略有不同。由于 JPEG 是一种有损图像格式,因此不同的解码器会产生位不相等的结果位图并不是不可想象的。假设在 iOS UI 中大量使用图像,JPG 解码器将不断调整以获得最佳性能似乎是合理的。

我什至相信可以想象,在不同型号的设备(即不同的处理器)上运行的相同操作系统版本之间,如果有多个版本的 JPG 解码器,结果可能不相等,每个版本都针对一个特定的 CPU,尽管这不能解释具有相同操作系统的相同型号的 2 台设备之间的区别。

您可以尝试使用无损格式的图像重新运行实验。

还可能值得指出的是,为 CGBitmapContext 提供您自己的后备内存,但不为字对齐留出特殊余地可能会导致性能不佳。例如,您有:

NSUInteger imageBytesPerRow = bytesPerPixel * imageWidth;

如果 imageBytesPerRow 不是 CPU 的 native 字长的倍数,您将获得次优性能。

关于iphone - CGContextDrawImage 跨设备的字节值不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724264/

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