實現了YUV文件的解析和現實,在VB6.0下開發和執行,新建窗體Form1,添加一個Pictrue控件並設置為控件數組。添加如下代碼

Option Explicit

Private Function yuv2rgb(ByVal y As Long, ByVal u As Long, ByVal v As Long) As Long
Dim r As Long, g As Long, b As Long

  r = (1000 * y + 1371 * (v - 128)) / 1000
  g = (1000 * y - 336 * (u - 128) - 698 * (v - 128)) / 1000
  b = (1000 * y + 1732 * (u - 128)) / 1000
  
  r = Max(0, Min(255, r))
  g = Max(0, Min(255, g))
  b = Max(0, Min(255, b))
         
  yuv2rgb = RGB(r, g, b)
 End Function


Private Sub Test_Click()
Const WIDTH As Integer = 176
Const HEIGHT As Integer = 144

Dim FileLen As Long
Dim FileBuff() As Byte
Dim FramsCount As Integer
Dim i As Integer, j As Integer, k As Integer
Dim y(HEIGHT, WIDTH) As Byte, Image(HEIGHT, WIDTH) As Long
Dim u(HEIGHT / 2, WIDTH / 2) As Byte
Dim v(HEIGHT / 2, WIDTH / 2) As Byte
Dim yy As Byte, uu As Byte, vv As Byte
Dim pos As Long


  Open "c:\work\akiyo_qcif.yuv" For Binary As #1
  FileLen = LOF(1)
  
  ReDim FileBuff(FileLen)
  Get #1, 1, FileBuff()
  Close #1
  
  FramsCount = FileLen / (WIDTH * HEIGHT + (WIDTH / 2 * HEIGHT / 2) * 2)
  pos = 0
  
  For i = 1 To FramsCount
  
    For j = 1 To HEIGHT
      For k = 1 To WIDTH
        y(j, k) = FileBuff(pos)
        pos = pos + 1
      Next k
    Next j
    
    For j = 1 To HEIGHT / 2
      For k = 1 To WIDTH / 2
        u(j, k) = FileBuff(pos)
        pos = pos + 1
      Next k
    Next j
    
    
    For j = 1 To HEIGHT / 2
      For k = 1 To WIDTH / 2
        v(j, k) = FileBuff(pos)
        pos = pos + 1
      Next k
    Next j
    
    
    For j = 1 To HEIGHT
      For k = 1 To WIDTH
        yy = y(j, k)
        uu = u(j / 2, k / 2)
        vv = v(j / 2, k / 2)
        Image(j, k) = yuv2rgb(yy, uu, vv)
      Next k
    Next j
    
    
    Load Picture1(i)
    Picture1(i).AutoRedraw = True
    
    For j = 1 To HEIGHT
      For k = 1 To WIDTH
        Picture1(i).PSet (k, j), Image(j, k)
        Next k
    Next j
    
    Picture1(i).Visible = True
    
    
  Next i

  Form1.WindowState = 2
 
End Sub

執行後將視頻中每一幅圖片解析出來,通過Picture控件數組將每個圖片顯示

YUV視頻文件解析和顯示_VB6