Obtención de datos de píxeles de UIImageView: funciona en simulador, no en dispositivo

Basado en las respuestas auna pregunta previa, He creado una categoría en UIImageView para extraer datos de píxeles. Esto funciona bien en el simulador, pero no cuando se implementa en el dispositivo. Debería decir que nosiempre - Lo extraño es que sí captura el color de píxel correcto si point.x == point.y; de lo contrario, me da datos de píxeles para un píxel en el otro lado de esa línea, como si estuviera reflejado. (Por lo tanto, un toque en un píxel en la esquina inferior derecha de la imagen me da los datos de píxeles para un píxel correspondiente en la esquina superior izquierda, pero al tocar un píxel en la esquina inferior izquierda se obtiene el color de píxeles correcto). Las coordenadas táctiles (CGPoint) son correctas.

¿Qué estoy haciendo mal?

Aquí está mi código:

@interface UIImageView (PixelColor)
- (UIColor*)getRGBPixelColorAtPoint:(CGPoint)point;
@end

@implementation UIImageView (PixelColor)

- (UIColor*)getRGBPixelColorAtPoint:(CGPoint)point
{
    UIColor* color = nil;

    CGImageRef cgImage = [self.image CGImage];
    size_t width = CGImageGetWidth(cgImage);
    size_t height = CGImageGetHeight(cgImage);
    NSUInteger x = (NSUInteger)floor(point.x);
    NSUInteger y = height - (NSUInteger)floor(point.y);

    if ((x < width) && (y < height))
    {
        CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
        CFDataRef bitmapData = CGDataProviderCopyData(provider);
        const UInt8* data = CFDataGetBytePtr(bitmapData);
        size_t offset = ((width * y) + x) * 4;
        UInt8 red = data[offset];
        UInt8 blue = data[offset+1];
        UInt8 green = data[offset+2];
        UInt8 alpha = data[offset+3];
        CFRelease(bitmapData);
        color = [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/255.0f];
    }

    return color;
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta