我想多张bmp-->一个AVI文件??
有提示的都有分,能给源码的(或着连接)给200分重点奖励!!!
15 个解决方案
#1
这个用VCM应该就行了。用ICCompressorChoose选择Filter为DivX
然后用
ICSeqCompressFrameStart
ICSeqCompressFrame
ICSeqCompressFrameEnd
将输入的BMP,压缩成为AVI。
具体怎么做可以去看MSDN上有关Video Compression Manager的内容。
然后用
ICSeqCompressFrameStart
ICSeqCompressFrame
ICSeqCompressFrameEnd
将输入的BMP,压缩成为AVI。
具体怎么做可以去看MSDN上有关Video Compression Manager的内容。
#2
小弟建议你如果真的用dshow做的话,可采用写一个源过滤器,按照你图片的格式设置媒体类型后,fillbuffer就可以了,你可以修改ball,不过你最好重载一下
DoBufferProcessingLoop.
此外,你可以使用ISampleGrabber,请参考StillCap.
DoBufferProcessingLoop.
此外,你可以使用ISampleGrabber,请参考StillCap.
#3
很感谢两位的发言,我还是倾向使用DirectShow. 不过,如果Vide Compression Manager 也能行的话,也很让人激动的。分两位一定有的。下面,接着!我做出个Demo后,就会结贴。
#4
为什么我用以下代码:
#include "vfw.h"
#pragma comment(lib,"vfw32.lib")
.......
.......
ICCompressorChoose,m_hWnd,ICMF_CHOOSE_ALLCOMPRESSORS,NULL,NULL,&CV,"COMPRESSOR");
BITMAPINFOHEADER biIn;
BITMAPINFOHEADER* pbiOut;
biIn.biBitCount=24;
biIn.biClrImportant=biIn.biClrUsed=0;
biIn.biCompression=BI_RGB;
biIn.biHeight=biIn.biWidth=200;
biIn.biPlanes=1;
biIn.biSize=sizeof(biIn);
biIn.biSizeImage=0;
biIn.biXPelsPerMeter=biIn.biYPelsPerMeter=5;
DWORD dwFormatSize=0;
dwFormatSize=ICCompressGetFormatSize(CV.hic, &biIn);
pbiOut=(BITMAPINFOHEADER*)new BYTE[dwFormatSize];
ICCompressGetFormat(CV.hic, &biIn, pbiOut);
DWORD dwCompressBufferSize = ICCompressGetSize(CV.hic, &biIn, pbiOut);
afxDump<<dwCompressBufferSize<<"\n";//得到的实际压缩后的数据的太小
afxDump<<dwFormatSize<<"\n";
ICCompressorFree(&CV);
delete[] pbiOut;
我选择了divx的算法压缩,得到的dwCompressBufferSize为120000字节!!!
真恐怖。是不是我哪里搞错了。你们可以试一试以上的代码。
有谁知道还有什么方法可以压缩BITMAP的数据吗?(源数据从视频卡捕获,我是想压缩后用于传输。
压缩后的所需的缓冲区的大小为:120000(200*200*24/8),那不是跟没有压缩前的大小一样吗?
#include "vfw.h"
#pragma comment(lib,"vfw32.lib")
.......
.......
ICCompressorChoose,m_hWnd,ICMF_CHOOSE_ALLCOMPRESSORS,NULL,NULL,&CV,"COMPRESSOR");
BITMAPINFOHEADER biIn;
BITMAPINFOHEADER* pbiOut;
biIn.biBitCount=24;
biIn.biClrImportant=biIn.biClrUsed=0;
biIn.biCompression=BI_RGB;
biIn.biHeight=biIn.biWidth=200;
biIn.biPlanes=1;
biIn.biSize=sizeof(biIn);
biIn.biSizeImage=0;
biIn.biXPelsPerMeter=biIn.biYPelsPerMeter=5;
DWORD dwFormatSize=0;
dwFormatSize=ICCompressGetFormatSize(CV.hic, &biIn);
pbiOut=(BITMAPINFOHEADER*)new BYTE[dwFormatSize];
ICCompressGetFormat(CV.hic, &biIn, pbiOut);
DWORD dwCompressBufferSize = ICCompressGetSize(CV.hic, &biIn, pbiOut);
afxDump<<dwCompressBufferSize<<"\n";//得到的实际压缩后的数据的太小
afxDump<<dwFormatSize<<"\n";
ICCompressorFree(&CV);
delete[] pbiOut;
我选择了divx的算法压缩,得到的dwCompressBufferSize为120000字节!!!
真恐怖。是不是我哪里搞错了。你们可以试一试以上的代码。
有谁知道还有什么方法可以压缩BITMAP的数据吗?(源数据从视频卡捕获,我是想压缩后用于传输。
压缩后的所需的缓冲区的大小为:120000(200*200*24/8),那不是跟没有压缩前的大小一样吗?
#5
很简单啊,你先在graph edit试验一下:
render一个bmp文件,把后面的color space converter(如果有的话)和video renderer去掉,接上video compressor中的divx mpeg-4 low-motion或fast-motion,接着avi mux + file writer,整个graph就完整了。
这只能转换一个bmp文件,你自己写一个source filter,不断读入一系列的位图数据push下去就行了。
render一个bmp文件,把后面的color space converter(如果有的话)和video renderer去掉,接上video compressor中的divx mpeg-4 low-motion或fast-motion,接着avi mux + file writer,整个graph就完整了。
这只能转换一个bmp文件,你自己写一个source filter,不断读入一系列的位图数据push下去就行了。
#6
当然在avi mux输入端可以接声音,这样视音频都有了。
这里似乎只有capboy吧?那位bapboy是哪位?
这里似乎只有capboy吧?那位bapboy是哪位?
#7
源码不用了吧,当初我刚刚学directshow时就是先写一个播放bmp位图的source filter,很简单。
#8
用ICSeqCompressFrame()得到压缩后的buffer中的数据如何显示出来??
#9
sorry,是capboy大侠,昨晚太困,笔误!!!capboy,很抱歉。
bookOz: 很感谢。你还回答过我几个问题,你的回答,很精彩。分一定,较高的。
bookOz: 很感谢。你还回答过我几个问题,你的回答,很精彩。分一定,较高的。
#10
(#$*#&(@)@_
我的名字什么时候改的?我都不知道 :)
现在精通dshow越来越多了.:)真好啊.
bookOz(Filter) 已经说的很详细了.我也没有什么补充的.
bookOz(Filter) :
名字都是filter.呵呵
我的名字什么时候改的?我都不知道 :)
现在精通dshow越来越多了.:)真好啊.
bookOz(Filter) 已经说的很详细了.我也没有什么补充的.
bookOz(Filter) :
名字都是filter.呵呵
#11
capboy(帽子)
我进了很多次都进不了你的网络播放器的下载网站,你把你的网络播放器的源代码发到我邮箱好吗?
cloudshadow@21cn.com
thanks
我进了很多次都进不了你的网络播放器的下载网站,你把你的网络播放器的源代码发到我邮箱好吗?
cloudshadow@21cn.com
thanks
#12
bookOz(Filter)
请给出具体的源代码。
请给出具体的源代码。
#13
capboy(帽子): 我的第一个DShow程序还是你的网络播放器改得,所以你是多媒体版,我最崇敬的人,真的sorry!!
#14
bookOz(Filter);给你200分
http://www.csdn.net/expert/topic/571/571993.xml?temp=.4575006
http://www.csdn.net/expert/topic/571/571993.xml?temp=.4575006
#15
bookOz(Filter);给你200分
继续领分,我会再开一张贴,给你第二个100分
继续领分,我会再开一张贴,给你第二个100分
#1
这个用VCM应该就行了。用ICCompressorChoose选择Filter为DivX
然后用
ICSeqCompressFrameStart
ICSeqCompressFrame
ICSeqCompressFrameEnd
将输入的BMP,压缩成为AVI。
具体怎么做可以去看MSDN上有关Video Compression Manager的内容。
然后用
ICSeqCompressFrameStart
ICSeqCompressFrame
ICSeqCompressFrameEnd
将输入的BMP,压缩成为AVI。
具体怎么做可以去看MSDN上有关Video Compression Manager的内容。
#2
小弟建议你如果真的用dshow做的话,可采用写一个源过滤器,按照你图片的格式设置媒体类型后,fillbuffer就可以了,你可以修改ball,不过你最好重载一下
DoBufferProcessingLoop.
此外,你可以使用ISampleGrabber,请参考StillCap.
DoBufferProcessingLoop.
此外,你可以使用ISampleGrabber,请参考StillCap.
#3
很感谢两位的发言,我还是倾向使用DirectShow. 不过,如果Vide Compression Manager 也能行的话,也很让人激动的。分两位一定有的。下面,接着!我做出个Demo后,就会结贴。
#4
为什么我用以下代码:
#include "vfw.h"
#pragma comment(lib,"vfw32.lib")
.......
.......
ICCompressorChoose,m_hWnd,ICMF_CHOOSE_ALLCOMPRESSORS,NULL,NULL,&CV,"COMPRESSOR");
BITMAPINFOHEADER biIn;
BITMAPINFOHEADER* pbiOut;
biIn.biBitCount=24;
biIn.biClrImportant=biIn.biClrUsed=0;
biIn.biCompression=BI_RGB;
biIn.biHeight=biIn.biWidth=200;
biIn.biPlanes=1;
biIn.biSize=sizeof(biIn);
biIn.biSizeImage=0;
biIn.biXPelsPerMeter=biIn.biYPelsPerMeter=5;
DWORD dwFormatSize=0;
dwFormatSize=ICCompressGetFormatSize(CV.hic, &biIn);
pbiOut=(BITMAPINFOHEADER*)new BYTE[dwFormatSize];
ICCompressGetFormat(CV.hic, &biIn, pbiOut);
DWORD dwCompressBufferSize = ICCompressGetSize(CV.hic, &biIn, pbiOut);
afxDump<<dwCompressBufferSize<<"\n";//得到的实际压缩后的数据的太小
afxDump<<dwFormatSize<<"\n";
ICCompressorFree(&CV);
delete[] pbiOut;
我选择了divx的算法压缩,得到的dwCompressBufferSize为120000字节!!!
真恐怖。是不是我哪里搞错了。你们可以试一试以上的代码。
有谁知道还有什么方法可以压缩BITMAP的数据吗?(源数据从视频卡捕获,我是想压缩后用于传输。
压缩后的所需的缓冲区的大小为:120000(200*200*24/8),那不是跟没有压缩前的大小一样吗?
#include "vfw.h"
#pragma comment(lib,"vfw32.lib")
.......
.......
ICCompressorChoose,m_hWnd,ICMF_CHOOSE_ALLCOMPRESSORS,NULL,NULL,&CV,"COMPRESSOR");
BITMAPINFOHEADER biIn;
BITMAPINFOHEADER* pbiOut;
biIn.biBitCount=24;
biIn.biClrImportant=biIn.biClrUsed=0;
biIn.biCompression=BI_RGB;
biIn.biHeight=biIn.biWidth=200;
biIn.biPlanes=1;
biIn.biSize=sizeof(biIn);
biIn.biSizeImage=0;
biIn.biXPelsPerMeter=biIn.biYPelsPerMeter=5;
DWORD dwFormatSize=0;
dwFormatSize=ICCompressGetFormatSize(CV.hic, &biIn);
pbiOut=(BITMAPINFOHEADER*)new BYTE[dwFormatSize];
ICCompressGetFormat(CV.hic, &biIn, pbiOut);
DWORD dwCompressBufferSize = ICCompressGetSize(CV.hic, &biIn, pbiOut);
afxDump<<dwCompressBufferSize<<"\n";//得到的实际压缩后的数据的太小
afxDump<<dwFormatSize<<"\n";
ICCompressorFree(&CV);
delete[] pbiOut;
我选择了divx的算法压缩,得到的dwCompressBufferSize为120000字节!!!
真恐怖。是不是我哪里搞错了。你们可以试一试以上的代码。
有谁知道还有什么方法可以压缩BITMAP的数据吗?(源数据从视频卡捕获,我是想压缩后用于传输。
压缩后的所需的缓冲区的大小为:120000(200*200*24/8),那不是跟没有压缩前的大小一样吗?
#5
很简单啊,你先在graph edit试验一下:
render一个bmp文件,把后面的color space converter(如果有的话)和video renderer去掉,接上video compressor中的divx mpeg-4 low-motion或fast-motion,接着avi mux + file writer,整个graph就完整了。
这只能转换一个bmp文件,你自己写一个source filter,不断读入一系列的位图数据push下去就行了。
render一个bmp文件,把后面的color space converter(如果有的话)和video renderer去掉,接上video compressor中的divx mpeg-4 low-motion或fast-motion,接着avi mux + file writer,整个graph就完整了。
这只能转换一个bmp文件,你自己写一个source filter,不断读入一系列的位图数据push下去就行了。
#6
当然在avi mux输入端可以接声音,这样视音频都有了。
这里似乎只有capboy吧?那位bapboy是哪位?
这里似乎只有capboy吧?那位bapboy是哪位?
#7
源码不用了吧,当初我刚刚学directshow时就是先写一个播放bmp位图的source filter,很简单。
#8
用ICSeqCompressFrame()得到压缩后的buffer中的数据如何显示出来??
#9
sorry,是capboy大侠,昨晚太困,笔误!!!capboy,很抱歉。
bookOz: 很感谢。你还回答过我几个问题,你的回答,很精彩。分一定,较高的。
bookOz: 很感谢。你还回答过我几个问题,你的回答,很精彩。分一定,较高的。
#10
(#$*#&(@)@_
我的名字什么时候改的?我都不知道 :)
现在精通dshow越来越多了.:)真好啊.
bookOz(Filter) 已经说的很详细了.我也没有什么补充的.
bookOz(Filter) :
名字都是filter.呵呵
我的名字什么时候改的?我都不知道 :)
现在精通dshow越来越多了.:)真好啊.
bookOz(Filter) 已经说的很详细了.我也没有什么补充的.
bookOz(Filter) :
名字都是filter.呵呵
#11
capboy(帽子)
我进了很多次都进不了你的网络播放器的下载网站,你把你的网络播放器的源代码发到我邮箱好吗?
cloudshadow@21cn.com
thanks
我进了很多次都进不了你的网络播放器的下载网站,你把你的网络播放器的源代码发到我邮箱好吗?
cloudshadow@21cn.com
thanks
#12
bookOz(Filter)
请给出具体的源代码。
请给出具体的源代码。
#13
capboy(帽子): 我的第一个DShow程序还是你的网络播放器改得,所以你是多媒体版,我最崇敬的人,真的sorry!!
#14
bookOz(Filter);给你200分
http://www.csdn.net/expert/topic/571/571993.xml?temp=.4575006
http://www.csdn.net/expert/topic/571/571993.xml?temp=.4575006
#15
bookOz(Filter);给你200分
继续领分,我会再开一张贴,给你第二个100分
继续领分,我会再开一张贴,给你第二个100分