objective-c从调整大小的图像中获取像素值

时间:2015-12-08 14:08:57

标签: objective-c uiimage resize cgimage cfdata

我从调整大小的UIimage获取值时遇到问题。 初始图像大小为500x500。 只有在调整图像大小(甚至大小相等)时,我使用的方法才会失败

  1. 我使用ImageContext和drawInRect创建新的已调整大小的图像。

  2. 我在另一种方法中使用CFDataRef和CFDataGetBytePtr来获取x,y处的像素值。

  3. 对于所有默认图像,CFDataRef返回@ 1000000。调整图像大小后,此值将更改为@ 90240000。与CFDataGetBytePtr相同,在调整图像大小后为空。

    现在我怀疑它与调整大小的图像实际上是一个新图像的事实有关,但我不能确定所以我真的很感激任何解释或建议我如何解决这个问题。

    感谢您抽出宝贵时间查看我的问题。

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,即在调整UIImage大小后使用 CFDataGetBytePtr 无法获得正确的值。我目前没有理由,但另一种获得UIImage价值的方法。代码如下:

size_t width = CGImageGetWidth(img);
size_t height = CGImageGetHeight(img);


size_t rowByteSize = width *  4;
unsigned char * data = new unsigned char[height * rowByteSize];

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(data, width, height, 8, rowByteSize,
                                             colorSpaceRef,
                                             kCGImageAlphaPremultipliedLast);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), img);
CGContextRelease(context);

CGColorSpaceRelease(colorSpaceRef);