Objective-C / iphone - изменить цвет пикселя? - PullRequest
3 голосов
/ 08 августа 2011

цель моего проекта: пользователь может изменить цвет детали изображения, касаясь экрана; при касании любой области цвет этой области должен быть изменен

У меня много идей, но мои идеи основаны на размещении других изображений (созданных динамически) в представлении, но эти идеи стоят много памяти;

как это сделать ().

1 Ответ

5 голосов
/ 08 августа 2011

Вы можете использовать Core Graphics.Добавьте QuartzCore framework в ваш проект.

Основной способ сделать это - визуализировать ваше изображение в растровом контексте:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8,bytesPerRow, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = originalWidth, .size.height = originalHeight}, cgImage);

, тогда вы можете получить ссылкук нижележащим пикселям:

UInt8* data = (UInt8*)CGBitmapContextGetData(bmContext);

Затем выполните операцию с пикселями:

const size_t bitmapByteCount = bytesPerRow * originalHeight;
for (size_t i = 0; i < bitmapByteCount; i += 4)
{
    UInt8 a = data[i];
    UInt8 r = data[i + 1];
    UInt8 g = data[i + 2];
    UInt8 b = data[i + 3];

    // Do pixel operation here

    data[i] = (UInt8)newAlpha
    data[i + 1] = (UInt8)newRed;
    data[i + 2] = (UInt8)newGreen;
    data[i + 3] = (UInt8)newBlue;
}

Наконец извлеките новое изображение из контекста:

CGImageRef newImage = CGBitmapContextCreateImage(bmContext);
...