Pobieranie danych pikseli z UIImageView - działa na symulatorze, a nie na urządzeniu

Na podstawie odpowiedzi napoprzednie pytanie, Stworzyłem kategorię na UIImageView do wyodrębniania danych pikseli. Działa to dobrze w symulatorze, ale nie w przypadku wdrożenia na urządzeniu. Powinienem powiedzieć niezawsze - dziwne jest to, że pobiera poprawny kolor piksela, jeśli point.x == point.y; w przeciwnym razie daje mi dane pikselowe dla piksela po drugiej stronie tej linii, jak gdyby było lustrzane. (Tak więc dotknięcie piksela w prawym dolnym rogu obrazu daje mi dane piksela dla odpowiedniego piksela w lewym górnym rogu, ale stuknięcie w piksel w lewym dolnym rogu zwraca poprawny kolor piksela). Współrzędne dotykowe (CGPoint) są prawidłowe.

Co ja robię źle?

Oto mój kod:

@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;
}

questionAnswers(3)

yourAnswerToTheQuestion