IOS处理位图

来源:互联网 发布:js attr方法 编辑:程序博客网 时间:2024/06/06 04:52

这段时间一直在做毕业设计,课题选的是用OC来实现app端的银行卡号码识别,每天都是在看资料看论文写代码,直到现在才想起来要把自己的过程在csdn记录一下(毕竟好记性不如烂笔头,靠我这脑子的记忆功能,估计一年后这些知识就忘光了)

首先还是记录下最常用的代码,那就是用位图模式编辑图片

- (UIImage *) editImage:(UIImage *)image{    CGImageRef  imageRef;    imageRef = anImage.CGImage;        size_t width  = CGImageGetWidth(imageRef);    size_t height = CGImageGetHeight(imageRef);        // rgb位构成    size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);        // 像素的颜色位数    size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);        // 位图每行的字节信息    size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);        // 图片的颜色空间    CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);        // 位图的bitmap信息    CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);    // 图像是否抗锯齿    bool shouldInterpolate = CGImageGetShouldInterpolate(imageRef);        CGColorRenderingIntent intent = CGImageGetRenderingIntent(imageRef);        // 图片数据源提供者    CGDataProviderRef dataProvider = CGImageGetDataProvider(imageRef);        // 拿到图片的字节数据    CFDataRef   data;    UInt8*      buffer;    data = CGDataProviderCopyData(dataProvider);       buffer = (UInt8*)CFDataGetBytePtr(data);           // 开始做处理    NSUInteger  x, y;    for (y = 0; y < height; y++) {        for (x = 0; x < width; x++) {            UInt8*  tmp;  //字符串指针            tmp = buffer + y * bytesPerRow + x * 4; // RGBA四个颜色分量,tmp指针指向需要处理的像素                    // 拿到rgba值            UInt8 red,green,blue,alpha;            red = *(tmp + 0);            green = *(tmp + 1);            blue = *(tmp + 2);            alpha = *(tmp + 3);                //这里就可以开始对每个像素点做处理了,比如要把rgb图转成灰度图,就让rgb的值都为brightness = 0.30*red + 0.59*green + 0.11*blue,这里省略代码                    }    }        // 生成处理后的图片    CFDataRef effectedData = CFDataCreate(NULL, buffer, CFDataGetLength(data));    CGDataProviderRef effectedDataProvider = CGDataProviderCreateWithCFData(effectedData);    CGImageRef  effectedCgImage;    UIImage* effectedCgImage = CGImageCreate(width, height,bitsPerComponent, bitsPerPixel, bytesPerRow,colorSpace, bitmapInfo, effectedDataProvider,NULL, shouldInterpolate, intent);    effectedImage = [[UIImage alloc] initWithCGImage:effectedCgImage];        // 一定要释放!!    CGImageRelease(effectedCgImage);    CFRelease(effectedDataProvider);    CFRelease(effectedData);    CFRelease(data);        return effectedImage;}


1 0
原创粉丝点击