-(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;
}
网友评论