IOS处理位图

这段时间一直在做毕业设计,课题选的是用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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值