AVI压缩或播放灰阶图问题
我要将一块灰阶图像数据做VAI文件。
BYTE buf[32*1024*1024];//32M,128幅512*512的灰阶图像。
以下是我代码:
BITMAPINFOHEADER bmpInfoHdr;
bmpInfoHdr->biSize=sizeof(BITMAPINFOHEADER);
bmpInfoHdr->biWidth=512;
bmpInfoHdr->biHeight=512;
bmpInfoHdr->biPlanes=1;
bmpInfoHdr->biBitCount=8;
bmpInfoHdr->biCompression=0;
bmpInfoHdr->biClrUsed=0;
bmpInfoHdr->biSizeImage=0;
bmpInfoHdr->biXPelsPerMeter=0;
bmpInfoHdr->biYPelsPerMeter=0;
bmpInfoHdr->biClrImportant=0;
/*没用,不知怎么用。若是用来生成BMP图,就可以用,结果是正确的灰阶图像
RGBQUAD rgb[256];
for(int k=0;k<256;k++)
{
rgb[k].rgbRed=k;
rgb[k].rgbGreen=k;
rgb[k].rgbBlue=k;
rgb[k].rgbReserved=0;
}
有资料介绍可以用:但是不知怎么给颜色表赋值
typedef struct tagBITMAPINFO
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1]; //颜色表
}BITMAPINFO;
*/
AVIFileInit();
AVISTREAMINFO strhdr;
PAVIFILE pfile;
PAVISTREAM ps;
int nFrames =0;
HRESULT hr;
BYTE bufFrame[512*512];
for(int i=0;i<128;i++)
{
if(nFrames==0)
{
AVIFileOpen(&pfile,AviFile,OF_WRITE | OF_CREATE,NULL);
memset(&strhdr,0,sizeof(AVISTREAMINFO));
strhdr.fccType=streamtypeVIDEO;
strhdr.fccHandler=0;
strhdr.dwScale=1;
strhdr.dwRate=10;
strhdr.dwSuggestedBufferSize=512*512;
SetRect(&strhdr.rcFrame,0,0,512,512);
hr=AVIFileCreateStream(pfile,&ps,&strhdr);
}
memcpy(bufFrame,Imagebuf+512*512*i,512*512);//Imagebuf放着32M图像数据
hr=AVIStreamSetFormat(ps,nFrames,&bmpInfoHdr,sizeof(BITMAPINFOHEADER));
hr=AVIStreamWrite(ps,nFrames,1,(LPBYTE)tmpbuf,512*512,AVIIF_KEYFRAME,NULL,NULL);
nFrames++;
}
AVIStreamRelease(ps);
free(bufFrame);
AVIFileRelease(pfile);
AVIFileExit();
return TRUE;
以上代码执行后图像的颜色不对,我要的是灰阶。我试过将图像改为24位,将每个8位像素点复制3次变成24位,灰阶效果出来了,但文件的大小增大了3倍,生成的AVI文件96M多点。太大了不可接受啊。
以上代码得的图像是倒的,但这不是问题。
还有就是怎么加入声音呢?