扫描图片像素
扫描图片像素
古乙丁三雨 发表于3年前
扫描图片像素
  • 发表于 3年前
  • 阅读 16
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 在网上找了很多扫描像素的方法,,很多都不能使用,这里提供一个扫描像素的片段
    NSUInteger width = img.size.width;
    NSUInteger height = img.size.height;
    NSUInteger bytesPerPixel = 4;
    NSUInteger bytesPerRow = width * bytesPerPixel;
//    NSUInteger bytesPerColumn = height * bytesPerPixel;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef bmContext = CGBitmapContextCreate(NULL, width, height, 8, bytesPerRow,     colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
    CGColorSpaceRelease(colorSpace);
    CGContextDrawImage(bmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width = width, .size.height = height}, img.CGImage);
    UInt8* data = (UInt8*)CGBitmapContextGetData(bmContext);
    const size_t bitmapByteCount = bytesPerRow * height;
    
    struct Color {
        UInt8 r;
        UInt8 g;
        UInt8 b;
    };
    for (size_t i = 0; i < bytesPerRow; i += 4) //shift 1 pixel
    {
        for (size_t j = 0; j < bitmapByteCount; j += bytesPerRow) //check every pixel in column
        {
            struct Color thisColor = {data[j + i + 1], data[j + i + 2], data[j + i + 3]};
            if (thisColor.r != 0)
            {
                NSString *areaPoint = NSStringFromCGPoint(CGPointMake(i/4, j/(width * bytesPerPixel)));
                [arrayPoint addObject:areaPoint];

//           NSLog(@"%zu %zu",i/4,j/(width * bytesPerPixel)); // point of area
            }
        }
    }
    CGContextRelease(bmContext);


标签: ios 像素扫描
共有 人打赏支持
粉丝 2
博文 43
码字总数 26026
×
古乙丁三雨
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: