2012-02-19 2 views
0

Я пытаюсь создать специальные пользовательские эффекты фильтра для изображения для iOS. До сих пор я пытался получать необработанные данные с помощью CGBitmapContextCreate. Тем не менее, я действительно не знаю, как изменить мои rawData. Я надеюсь выполнить на нем расчеты. Надеюсь, что пиксель за пикселем с rawData, но я не знаю, как его манипулировать.Как выполнить вычисления с исходными данными изображения с помощью CoreGraphics?

Я также не знаю, как я могу нарисовать свой растровый контекст для UIImage, поэтому я могу отобразить готовый продукт на UIImageView.

Может ли кто-нибудь дать мне несколько указаний на то, как я мог бы это достичь?

Вот мой код до сих пор:

// First get the image into your data buffer 
CGImageRef imageRef = imageView.image.CGImage; 
NSUInteger width = CGImageGetWidth(imageRef); 
NSUInteger height = CGImageGetHeight(imageRef); 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
unsigned char *rawData = calloc(height * width * 4, sizeof(unsigned char)); 
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), imageRef); 

//perform calculations on rawData? or context? not sure!! i hope to effect pixel by pixel. 


//am i doing this correctly? 
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
//set the imageview with the new image 
[imageView setImage:newImage]; 
CGContextRelease(context); 

ответ

0

Вы почти там. Вы можете выполнять свои транзакции по каналам RGB и Alpha с помощью:

for (NSUInteger i = 0 ; i < rawDataSpace ; i+=4) { 
     rawData[i+0] = ...    
     rawData[i+1] = ...    
     rawData[i+2] = ...    
     rawData[i+3] = ...  // = Alpha channel   
Смежные вопросы