我正在尝试为iOS上的图片创建特定的自定义滤镜效果。到目前为止,我一直在尝试使用CGBitmapContextCreate获取原始数据。但是,我真的不知道如何修改我的rawData。我希望对它进行计算。我希望用rawData逐个像素地生效,但我不知道如何操作它。
我也不知道如何将我的位图上下文绘制到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 :(得分: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