我的做法是:
nColors = 256
ReDim BMI.bmiColors(0 To nColors - 1) As RGBQUAD
For k = 0 To 255
  With BMI.bmiColors(k)
    .Blue = k
    .Green = k
    .Red = k
    .Reserved = 0
  End With
Next可是输出是绿色一片,上面有些杂七杂八的点。:(

解决方案 »

  1.   

    你设置的是256级灰度调色板,产生别的颜色说明调色板并没有设置到你的AVI流里面去
    需要在AVIStreamSetFormat函数中将bitmapinfo结构传进去,另外注意一下你的BMI.BitmapInfoHeader结构中的biClrUsed是不是=256
    比如:AVIStreamSetFormat(lngCompressedStreamHandle, 0, ByVal VarPtr(BMI), Len(BMI))另外AVIStreamSetFormat函数只能在第一次调用的时候传入调色板信息,如果要修改调色板信息必须在写入若干帧数据以后才能再改
      

  2.   

    这基本上是全部了,请看看有没有错误?BMI.bmiHeader.biBitCount = 8
    BMI.bmiHeader.biSizeImage = BytesPerScanLine8(96) * 64
    BMI.bmiHeader.biClrUsed = 256
    biSizeImage8 = BytesPerScanLine8(96) * 64
    ReDim pVidStreamNew(biSizeImage8 + 1) As Byte
    nColors = 256
    ReDim BMI.bmiColors(0 To nColors - 1) As RGBQUAD
    For k = 0 To 255
      With BMI.bmiColors(k)
        .Blue = CByte(k)
        .Green = CByte(k)
        .Red = CByte(k)
        .Reserved = 0
      End With
    Next
    AVIStreamSetFormat pVidStreamOut, 0, ByVal VarPtr(BMI), Len(BMI)
    For k = 0 To biSizeImage8 - 1
      luminance = (pVidStreamOld(j + 2) * 0.299) + (pVidStreamOld(j + 1) * 0.587) + (pVidStreamOld(j) * 0.114)
      colorIndex = Math.Round((luminance * (nColors - 1) / 255))
      pVidStreamNew(k) = CByte(colorIndex)
      j = j + 3
      k = k + 1
    Next k
    res = AVIStreamWrite(pVidStreamOut, i, 1, pVidStreamNew(0), biSizeImage8, AVIIF_KEYFRAME, 0, 0)             现在变成紫色了,上面有些其他色的杂点。图像和刚才一样。
    我把avi的色彩值放到了一个byte型的数组中,用上面的循环将24位变成8位,需不需要“另外AVIStreamSetFormat函数只能在第一次调用的时候传入调色板信息,如果要修改调色板信息必须在写入若干帧数据以后才能再改”?
      

  3.   

    从代码角度我个人觉得没什么大错,你可以试着获取AVIStreamSetFormat的返回值,兴许它返回的已经是非零的错误代码了。
    你所说的变色问题我也遇到过,而且每次生成的AVI是什么颜色还是不确定的,郁闷了我好一阵子。当时我错误理解了AVIStreamSetFormat,以为只需要传入BitmapInfoHeader,后来修正错误传入BitmapInfo结构就完全正常了
      

  4.   

    从代码角度我个人觉得没什么大错,你可以试着获取AVIStreamSetFormat的返回值,兴许它返回的已经是非零的错误代码了。
    你所说的变色问题我也遇到过,而且每次生成的AVI是什么颜色还是不确定的,郁闷了我好一阵子。当时我错误理解了AVIStreamSetFormat,以为只需要传入BitmapInfoHeader,后来修正错误传入BitmapInfo结构就完全正常了
      

  5.   

    AVIStreamSetFormat返回值是0,传入的也是BitmapInfo(从上面代码可以看到),但是出现的图像是这样:http://photo.163.com/openpic.php?user=hoo&pid=351301549&_dir=%2F14854971有一点你说的没错:每次生成的AVI是什么颜色还是不确定的。因为我的转出8bit avi文件是彩色的,我用上面的方法设置调色板是否错误?我想应该是错的。
    你知道正确的方法吗?请指教。
      

  6.   

    在写入avi文件的时候,是不是需要随时修改调色板?怎么知道什么时候该修改了?
      

  7.   

    chewinggum(口香糖·把减肥列入下一个五年计划)
    你有qq吗?很想和你探讨一下。谢谢!