1
我有以下代碼,可以根據觸摸的當前位置(X和Y座標)正確檢索用戶手指在圖像上觸摸的像素顏色(RGB)。所以,這段代碼工作正常,但不是視網膜顯示設備:如何從視網膜顯示設備中的CGImage獲取正確的像素?
-(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);
}
我想知道我應該怎麼調整這個代碼,使其視網膜顯示設備的工作。
任何建議都會好起來的。在此先感謝您的幫助。
愚蠢的問題:什麼是關於視網膜顯示器有什麼不同?爲什麼這個代碼不工作 - 你有什麼錯誤? – Rup 2012-07-08 19:22:38
哦,我明白了,視網膜顯示器是iPhone 4S和更新的一項功能,至少在屏幕分辨率上翻倍。在普通iPhone中,只能有320 x 480 MAX的圖像,但在視網膜顯示設備中,最大值爲640 x 960,並且它們很適合屏幕。所以,在我的代碼中,我沒有考慮這個計算,因爲對於我來說,一個像素等於一個像素,這就是爲什麼在普通設備中我得到正確的像素,但在視網膜中事物放大,因此這個代碼檢索的像素不完全是在屏幕上觸摸這些設備。 – Renexandro 2012-07-08 21:26:12
對,對不起 - 我的意思是視網膜設備編程有什麼不同。那麼你是說iOS正確地將輸入縮放到你在iPhones和舊iPad上採用的屏幕大小,而不是新的?這看起來很瘋狂。 – Rup 2012-07-09 00:26:15