Ecco come fare si
CGContextRef ctx;
CGImageRef imageRef = [image CGImage];
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);
//IF YOU WANT TO ALTER THE PIXELS
int byteIndex = 0;
for(int ii = 0 ; ii < width * height ; ++ii)
{
rawData[byteIndex] = (char)(newPixelValue);
rawData[byteIndex+1] = (char)(newPixelValue);
rawData[byteIndex+2] = (char)(newPixelValue);
byteIndex += 4;
}
ctx = CGBitmapContextCreate(rawData,
CGImageGetWidth(imageRef),
CGImageGetHeight(imageRef),
8,
CGImageGetBytesPerRow(imageRef),
CGImageGetColorSpace(imageRef),
kCGImageAlphaPremultipliedLast);
imageRef = CGBitmapContextCreateImage(ctx);
UIImage* rawImage = [UIImage imageWithCGImage:imageRef];
CGContextRelease(ctx);
image = rawImage;
free(rawData);
fonte
2012-01-25 23:21:26
Ugly ma dovrebbe funzionare –
@WilliamJockusch L'ho implementato questo tuttavia voglio rilevare il colore (di appena 1 pixel sullo schermo) regolarmente (ogni 0,04 secondi usando un timer) creando uno screenshot dell'intero schermo lo sta facendo ritardo della mia app ... non hai trovato un modo più efficiente di memoria per fare questo hai fatto? E scuse per aver commentato un thread così vecchio! ;) – simonthumper
@simonthumper Purtroppo no. Se non hai bisogno di afferrare lo schermo, probabilmente potresti fare le cose più velocemente. (Dipende molto dalla fonte dei dati dell'immagine.) Detto questo, sarei tentato di creare una nuova domanda (sebbene menzioni che hai letto/assorbito questa) se il problema che stai tentando di risolvere è sufficientemente diverso. –