Как получить пиксельные данные от UIImage (Касание Какао) или CGImage (Базовая Графика)?

У меня есть UIImage (Касание Какао). От этого я рад получить CGImage или что-либо еще, что Вы хотели бы, это доступно. Я хотел бы записать эту функцию:

- (int)getRGBAFromImage:(UIImage *)image atX:(int)xx andY:(int)yy {
  // [...]
  // What do I want to read about to help
  // me fill in this bit, here?
  // [...]

  int result = (red << 24) | (green << 16) | (blue << 8) | alpha;
  return result;
}
196
задан pppery 25 October 2019 в 10:48
поделиться

0 ответов

Один способ сделать его состоит в том, чтобы нарисовать изображение к растровому контексту, который поддерживается данным буфером для данного цветового пространства (в этом случае, это - RGB): (обратите внимание, что это скопирует данные изображения в тот буфер, таким образом, Вы действительно захотите кэшировать его вместо того, чтобы делать эту операцию каждый раз, когда необходимо добраться, пиксельные значения)

Посмотрите ниже как образец:

// First get the image into your data buffer
CGImageRef image = [myUIImage CGImage];
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
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));
CGContextRelease(context);

// Now your rawData contains the image data in the RGBA8888 pixel format.
int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
red = rawData[byteIndex];
green = rawData[byteIndex + 1];
blue = rawData[byteIndex + 2];
alpha = rawData[byteIndex + 3];
48
ответ дан mxcl 23 November 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: