Я хочу манипулировать изображением и перемешать цвета. Я пытаюсь повернуть 180 degress с пикселями, но не удалось. Я не хочу использовать поворот UIImageView, потому что я не буду просто поворачивать изображения. Я хочу делать все, что захочу.Цель C манипулировать изображением
EDIT: Это был неправильный оператор. Я не знаю, почему я использовал% вместо /. В любом случае, я надеюсь, что этот код поможет кому-то (он работает).
- (IBAction)shuffleImage:(id)sender {
[self calculateRGBAsAndChangePixels:self.imageView.image atX:0 andY:0];
}
-(void)calculateRGBAsAndChangePixels:(UIImage*)image atX:(int)x andY:(int)y
{
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * image.size.width;
NSUInteger bitsPerComponent = 8;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bmContext = CGBitmapContextCreate(NULL, image.size.width, image.size.height, bitsPerComponent,bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, image.size.width, image.size.height}, image.CGImage);
UInt8* data = (UInt8*)CGBitmapContextGetData(bmContext);
const size_t bitmapByteCount = bytesPerRow * image.size.height;
NSMutableArray *reds = [[NSMutableArray alloc] init];
NSMutableArray *greens = [[NSMutableArray alloc] init];
NSMutableArray *blues = [[NSMutableArray alloc] init];
for (size_t i = 0; i < bitmapByteCount; i += 4)
{
[reds addObject:[NSNumber numberWithInt:data[i]]];
[greens addObject:[NSNumber numberWithInt:data[i+1]]];
[blues addObject:[NSNumber numberWithInt:data[i+2]]];
}
for (size_t i = 0; i < bitmapByteCount; i += 4)
{
data[i] = [[reds objectAtIndex:reds.count-i%4-1] integerValue];
data[i+1] = [[greens objectAtIndex:greens.count-i%4-1] integerValue];
data[i+2] = [[blues objectAtIndex:blues.count-i%4-1] integerValue];
}
CGImageRef newImage = CGBitmapContextCreateImage(bmContext);
UIImage *imageView = [[UIImage alloc] initWithCGImage:newImage];
self.imageView.image = imageView;
}
Я хочу сделать что-то подобное, но делать это с пикселями один за другим. –
По общему признанию, я не очень хорошо разбираюсь в этом процессе, но [эта ссылка] (https://developer.apple.com/library/content/qa/qa1509/_index.html) должна помочь с получением данных пикселей из CGImage. После того, как вы получите данные о пикселях, – tww0003
Упс, отправил комментарий, прежде чем я закончил набирать его, и я не уверен, как его редактировать ... В любом случае, после получения пиксельных данных, вы захотите выполнить [отражение ] (https://en.wikipedia.org/wiki/Reflection_ (математика)) по этим данным, которые должны отражать это. – tww0003