美文网首页
OC 视频流图片剪切

OC 视频流图片剪切

作者: Jniying | 来源:发表于2021-11-18 09:17 被阅读0次

    场景

    通过视频流识别范围内的图片。

    问题

    把像 素rect 转化为 点rect,我们通常以屏幕像素比例转化 错误示范 代码如下:
    结果:图片剪切的范围获取不准确。

    /*
    image : 要进行剪切的图片
    rect:要剪切的图片范围
    */
    - (UIImage *)ct_imageFromImage:(UIImage *)image inRect:(CGRect)rect{
        //获取正确方向的图片
        UIImage *tempImage = [self fixOrientation:image];
    
        //把像 素rect 转化为 点rect(如无转化则按原图像素取部分图片)
        CGFloat scale = [UIScreen mainScreen].scale;
        CGFloat x= rect.origin.x*scale,y=rect.origin.y*scale,w=rect.size.width*scale,h=rect.size.height*scale;
        CGRect dianRect = CGRectMake(x, y, w, h);
        
        //截取部分图片并生成新图片
        
        CGImageRef sourceImageRef = [tempImage CGImage];
        
        CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, dianRect);
        
        UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
        
        return newImage;
        
    }
    

    解决方案代码

    重点: 把像 素rect 转化为 点rect 的时候要以图片大小对比屏幕作为参考物。

    不能单纯以屏幕像素点作为参考物,实际视频流获取的图片比屏幕显示的可能要大或者小。

    /*
    image : 要进行剪切的图片
    rect:要剪切的图片范围
    */
    - (UIImage *)ct_imageFromImage:(UIImage *)image inRect:(CGRect)rect{
        //获取正确方向的图片
        UIImage *tempImage = [self fixOrientation:image];
    
        //把像 素rect 转化为 点rect(如无转化则按原图像素取部分图片)
        CGFloat wScale = tempImage.size.width / zhcScreenWidth;
        CGFloat hScale = tempImage.size.height / zhcScreenHeight;
        CGFloat x= rect.origin.x*wScale,y=rect.origin.y*hScale,w=rect.size.width*wScale,h=rect.size.height*hScale;
        CGRect dianRect = CGRectMake(x, y, w, h);
        
        //截取部分图片并生成新图片
        
        CGImageRef sourceImageRef = [tempImage CGImage];
        
        CGImageRef newImageRef = CGImageCreateWithImageInRect(sourceImageRef, dianRect);
        
        UIImage *newImage = [UIImage imageWithCGImage:newImageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
        
        return newImage;
        
    }
    

    相关文章

      网友评论

          本文标题:OC 视频流图片剪切

          本文链接:https://www.haomeiwen.com/subject/dwldtrtx.html