resize pixelBuffer same ratio

-(CVPixelBufferRef)resizePixelBuffer:(CVPixelBufferRef) srcPixelBuffer cropWidth:(int)cropWidth cropHeight:(int)cropHeight scaleWidth:(int)scaleWidth scaleHeight:(int)scaleHeight
{
//    int cropX0, cropY0, cropHeight, cropWidth, outWidth, outHeight;
//
//    CVPixelBufferLockBaseAddress(srcPixelBuffer,0);
//    void *baseAddress = CVPixelBufferGetBaseAddress(srcPixelBuffer);
//    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(srcPixelBuffer);
//
//    vImage_Buffer inBuff;
//    inBuff.height = cropHeight;
//    inBuff.width = cropWidth;
//    inBuff.rowBytes = bytesPerRow;
//
//    int startpos = cropY0*bytesPerRow+4*cropX0;
//    inBuff.data = baseAddress+startpos;
//
//    unsigned char *outImg= (unsigned char*)malloc(4*outWidth*outHeight);
//    vImage_Buffer outBuff = {outImg, outHeight, outWidth, 4*outWidth};
//
//    vImage_Error err = vImageScale_ARGB8888(&inBuff, &outBuff, NULL, 0);
//    if (err != kvImageNoError) NSLog(@" error %ld", err);


   CVPixelBufferLockBaseAddress(srcPixelBuffer, 0);
   void *srcData = CVPixelBufferGetBaseAddress(srcPixelBuffer);
   size_t srcBytesPerRow = CVPixelBufferGetBytesPerRow(srcPixelBuffer);
   vImage_Buffer srcBuffer;
   srcBuffer.height = cropHeight;
   srcBuffer.width = cropWidth;
   srcBuffer.rowBytes = srcBytesPerRow;
   srcBuffer.data = srcData;
    
   int destBytesPerRow = scaleWidth*4;
   unsigned char *destData= (unsigned char*)malloc(scaleHeight*destBytesPerRow);
   vImage_Buffer destBuffer = {destData, scaleWidth, scaleHeight, 4*scaleWidth};
   vImage_Error err = vImageScale_ARGB8888(&srcBuffer, &destBuffer, NULL, 0);
   CVPixelBufferUnlockBaseAddress(srcPixelBuffer, 0);
    
   OSType pixelFormat = CVPixelBufferGetPixelFormatType(srcPixelBuffer);
   CVPixelBufferRef dstPixelBuffer;
   CVReturn status = CVPixelBufferCreateWithBytes(NULL, scaleWidth, scaleHeight,
                                 pixelFormat, destData,
                                 destBytesPerRow,NULL,
                                NULL, NULL, &dstPixelBuffer);
    free(destData);
    return dstPixelBuffer;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Found a swap file by the name ".podfile.swp"owned by: Net...
    Ego_1973阅读 2,930评论 1 6
  • 今天和老妈在聊天的时候,说到买房子的事情,我说要是老爸不愿意给钱怎么办,她说就二十多万,怕什么。 当时...
    Product阅读 147评论 0 1
  • 我以为我会忘记 在每个开心的时刻 每一个细胞都雀跃着欢呼着 却只为发现 你是场散去的筵席 我以为我会忘记 在每个酣...
    志留文昌阅读 334评论 0 3
  • iOS触摸事件处理 主要是记录下iOS的界面触摸事件处理机制,然后用一个实例来说明下应用场景.一、处理机制界面响应...
    醉叶惜秋阅读 561评论 0 0
  • 春天是用来生产的,一胎太少它们把剧情铺在五颜六色的谎言里多巴胺在白云下放着光导演说,不潜是可耻的众鸟啁啾,说是放生...
    曹望尘阅读 153评论 0 2