IOS Dev Intro - vImage scale

来源:互联网 发布:java不关闭流 编辑:程序博客网 时间:2024/06/05 15:45


{
            CVImageBufferRef cvimgRef = CMSampleBufferGetImageBuffer(sampleBuffer);
            CVPixelBufferLockBaseAddress(cvimgRef,0);
            uint32_t *imageData = (uint32_t *)CVPixelBufferGetBaseAddress(cvimgRef);
            int width = CVPixelBufferGetWidth(cvimgRef);
            int height = CVPixelBufferGetHeight(cvimgRef);
            int bytes = CVPixelBufferGetBytesPerRow(cvimgRef);


            vImage_Buffer  inBuff;
            inBuff.data = imageData;
            inBuff.width = width;
            inBuff.height = height;
            inBuff.rowBytes = 4 * width;
            CVPixelBufferLockBaseAddress(_targetPixelBufferRef, 0);
            uint32_t *tData = (uint32_t *)CVPixelBufferGetBaseAddress(_targetPixelBufferRef);
            vImage_Buffer  outBuff = { _newData, 360, 640, 4*640 };
            vImageCVImageFormatRef vformat = vImageCVImageFormat_CreateWithCVPixelBuffer(cvimgRef);


            vImage_CGImageFormat cgfromat = {
                .bitsPerComponent = 8,
                .bitsPerPixel = 32,
                .bitmapInfo = kCGBitmapByteOrderDefault,
            };
            const CGFloat bgcolor[3] = {0.0, 0.0, 0.0};
            vImageBuffer_InitWithCVPixelBuffer(&inBuff, &cgfromat, cvimgRef, vformat, bgcolor, kvImageNoAllocate);


            vImage_Error error = vImageScale_ARGB8888(&inBuff, &outBuff, NULL, kvImageHighQualityResampling);
            if(error != kvImageNoError) {
                NSLog(@"kvImage error = %ld\n", error);
            }
            memcpy(tData,  _newData,  640 * 360 * 4);
            // error = vImageBuffer_CopyToCVPixelBuffer(&outBuff, &cgfromat, _targetPixelBufferRef, vformat, bgcolor, kvImageNoFlags);
            CVPixelBufferUnlockBaseAddress(_targetPixelBufferRef, 0);
            CVPixelBufferUnlockBaseAddress(cvimgRef,0);
        }

0 0
原创粉丝点击