2011-04-11 57 views
5

我從我的AVCaptureSession獲取CVImageBufferRef,並且想要將該圖像緩衝區上傳到網絡上。爲了節省空間和時間,我希望在不將圖像渲染成CIImage和NSBitmapImage的情況下執行此操作,這是我在處處看到的解決方案(如:How can I obtain raw data from a CVImageBuffer object)。從CVImageBuffer原始數據沒有呈現?

這是因爲我的印象是CVImageBuffer可能是壓縮的,這對我來說很棒,如果我渲染它,我必須將它解壓縮成完整的位圖,然後上傳整個位圖。我想採用壓縮的數據(意識到單個壓縮幀本身後來可能無法修改),就像它位於CVImageBuffer中一樣。我認爲這意味着我需要CVImageBuffer的基本數據指針及其長度,但它沒有出現在API中獲取它的方法。任何人有任何想法?

回答

8

CVImageBuffer本身是一種抽象類型。您的圖片應該是CVPixelBuffer,CVOpenGLBuffer或CVOpenGLTexture的實例。這些類型的文檔列出了可用於訪問數據的功能。

知道哪些類型是否使用GetTypeID方法:

CVImageBufferRef image = …; 
CFTypeID imageType = CFGetTypeID(image); 

if (imageType == CVPixelBufferGetTypeID()) { 
    // Pixel Data 
} 
else if (imageType == CVOpenGLBufferGetTypeID()) { 
    // OpenGL pbuffer 
} 
else if (imageType == CVOpenGLTextureGetTypeID()) { 
    // OpenGL Texture 
} 
+0

好了,文檔說CVOpenGLTexture在QuartzCore.framework定義,但我仍然有鏈接錯誤,無法與任OpenGLBuffer建設或OpenGLTexture檢查(也嘗試過CoreVideo.framework)。幸運的是,我似乎有像素緩衝區,所以這是一個有爭議的問題。 – jab 2011-04-12 19:59:55