Вы можете получить растровое изображение для каждого из изображений, используя что-то вроде:
pixels = CGBitmapContextGetData( ctx );
Когда у вас есть пиксели, вы можете добавлять их любым способом, каким захотите.Вы можете сделать простую сумму, среднее значение или ...
Если ваше растровое изображение - RGBA, то пиксель в местоположении n будет
p = ((UInt32 *) pixels)[n];
. Итерировать по всем пикселям
pixelCount = CGBitmapContextGetBytesPerRow(ctx)/4 * CGBitmapContextGetHeight(ctx);
for (i = 0; i < pixelCount; i++) {
p = ((UInt32 *) pixels)[n];
newpixel = processpixel(p);
copyofpixels[n] = newpixel;
}
(обратите внимание выше, что вы не можете изменять данные пикселей, я считаю, что они неизменны. Вы должны записать копию или новый массив, а затем создать UIImage из этого растрового изображения, используя CGBitmapContextCreateImage(ctx);
)
Вот как вы можете получить доступ к данным пикселей:
redByte = p & 0x000000ff;
greenByte = p & 0x0000ff00 >> 8;
blueByte = p & 0x00ff0000 >> 16;
alphaByte = p & 0xff000000 >> 24;
При добавлении убедитесь, что вы добавляете красные, зеленые, синие и альфа-каналы отдельно.Если добавленная стоимость превышает 255, то ограничьте ее 255. В зависимости от вашего использования игнорируйте альфа.Например:
reds = redByte1 + redByte2;
if (reds > 255) reds = 255;
greens = greenByte1 + greenByte2;
if (greens > 255) greens = 255;
blues = blueByte1 + blueByte2;
if (blues > 255) blues = 255;
// as you can see, everything is getting brighter. A red dot and another darker red dot will result in a brighter red dot, and not a color in-between.
И установить его обратно в пиксель:
UInt32 *newPixel = reds + (greens << 8) + (blues << 16); // put in an alpha here if you want
copyofpixels[n] = newPixel;
Надеюсь, это поможет.