С точки зрения какао, самый простой подход - использовать класс NSBitmapImageRep
.Например, после инициализации объектом NSData
вы можете получить доступ к значению цвета по любой координате как объект NSColor
, используя методы -setColor:atX:y:
и -colorAtX:y:
.Обратите внимание, что если вы вызываете эти методы в тесных циклах, вы можете потерять производительность от objc_msg_send
.Вы можете рассмотреть доступ к необработанным растровым данным в виде массива C с помощью метода -bitmapData
.Например, при работе с изображением RGB значения цвета для каждого канала сохраняются со смещением 3.
Например:
color values: [R,G,B][R,G,B][R,G,B]
indices: [0,1,2, 3,4,5, 6,7,8]
Для циклического прохождения каждого пикселя изображения иизвлечь компоненты RGB:
unsigned char *bitmapData = [bitmapRep bitmapData];
if ([bitmapRep samplesPerPixel] == 3) {
for (i = 0; i < [image size].width * [image size].height; i++) {
int base = (i * 3);
// these range from 0-255
unsigned char red = bitmapData[base + 0];
unsigned char green = bitmapData[base + 1];
unsigned char blue = bitmapData[base + 2];
}
}