美文网首页
resize pixelBuffer same ratio

resize pixelBuffer same ratio

作者: 陆号 | 来源:发表于2018-06-14 10:45 被阅读165次
-(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;
}

相关文章

网友评论

      本文标题:resize pixelBuffer same ratio

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