AVI压缩或播放灰阶图问题

huziwu 2006-04-12 10:34:09
我要将一块灰阶图像数据做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多点。太大了不可接受啊。
以上代码得的图像是倒的,但这不是问题。
还有就是怎么加入声音呢?
...全文
157 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyuanjing 2006-04-19
  • 打赏
  • 举报
回复
接分
huziwu 2006-04-18
  • 打赏
  • 举报
回复
没来人顶啊!!!!!!!晕死
来个人结贴了!!!!!!!!!!!!!
huziwu 2006-04-12
  • 打赏
  • 举报
回复
或是有什么压缩算法可以用吗?要求无损压缩。
huziwu 2006-04-12
  • 打赏
  • 举报
回复
怎么一直在沉啊!!!!!!!!难道没有这方面的高手路过吗!!!!!!!!!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧