1

我有以下代码可以根据触摸的当前位置(X 和 Y 坐标)正确检索用户手指在图像上触摸的像素颜色(RGB)。因此,这段代码可以正常工作,但不适用于视网膜显示设备:

-(void)drawFirstColorWithXCoord:(CGFloat)xCoor andWithYCoord:(CGFloat)yCoor
{
    CGImageRef imageRef = [image CGImage]; //image is an ivar of type UIImage
    NSUInteger width = CGImageGetWidth(imageRef);
    NSUInteger height = CGImageGetHeight(imageRef);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    unsigned char *rawData = malloc(height * width * 4);
    NSUInteger bytesPerPixel = 4;
    NSUInteger bytesPerRow = bytesPerPixel * width;
    NSUInteger bitsPerComponent = 8;
    CGContextRef context = CGBitmapContextCreate(rawData, width, height,
                                             bitsPerComponent, bytesPerRow, colorSpace,
                                             kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    CGColorSpaceRelease(colorSpace);

    CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
    CGContextRelease(context);

    //GET PIXEL FROM POINT
    int index = 4*((width*round(yCoor))+round(xCoor));

    int R = rawData[index];
    int G = rawData[index+1];
    int B = rawData[index+2];

    NSLog(@"%d   %d   %d", R, G, B);

    free(rawData);
}

我想知道我应该在此代码中进行哪些调整以使其适用于视网膜显示设备。

任何建议都将不胜感激。在此先感谢您的帮助。

4

1 回答 1

0

尝试:

CGFloat scale = [[UIScreen mainScreen] scale];
NSUInteger bytesPerRow = width * scale * bytesPerPixel;
于 2013-02-11T16:34:02.133 回答