请教:位图压缩的算法
请问:位图压缩的算法
我的位图是24位的,因为太大,传输不方便,我想压缩,
请问:这种位图一般是用哪种算法压缩?有没有源代码?
(要有压缩与解压缩的)
------解决方案--------------------
你可以压缩成YUV420格式,解压与压缩网上都有相关代码。
当然,现在用于流传输H264格式也不错。压缩率高但失真大。ffmpeg是个很好的编码与解码库,可尝试。
------解决方案--------------------
我的位图是24位的,因为太大,传输不方便,我想压缩,
请问:这种位图一般是用哪种算法压缩?有没有源代码?
(要有压缩与解压缩的)
------解决方案--------------------
你可以压缩成YUV420格式,解压与压缩网上都有相关代码。
当然,现在用于流传输H264格式也不错。压缩率高但失真大。ffmpeg是个很好的编码与解码库,可尝试。
------解决方案--------------------
- C/C++ code
IStream* CDXGraph::StretchPic(const WCHAR *path, const WCHAR *format, int width, int heigh) { Bitmap orgpic(path) ; Image *Despic = orgpic.GetThumbnailImage(width,heigh) ; IStream* pstm = NULL; CLSID encoderClsid ; GetEncoderClsid(format,&encoderClsid) ; CString name; name = "Debug\\1.bmp"; Status sta =Despic->Save(name.AllocSysString(),&encoderClsid,0) ; //Despic->Save(pstm, &encoderClsid,0); if (sta == Ok) { return pstm ; } return NULL ; } int CDXGraph::GetEncoderClsid(const WCHAR *format, CLSID *pClsid) { UINT num = 0; // number of image encoders UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size); if(size == 0) return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size)); if(pImageCodecInfo == NULL) return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j) { if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 ) { *pClsid = pImageCodecInfo[j].Clsid; free(pImageCodecInfo); return j; // Success } } free(pImageCodecInfo); return -1; }
------解决方案--------------------
传输H264格式也不错。压缩率高但失真大。ffmpeg是个很好的编码与解码库,可尝试。
------解决方案--------------------
用CXImage把bmp转为jpg
------解决方案--------------------
普通图片的话搞个毛的h264啊,搞个毛的YUV420啊!!
下载一个jpeg的库压缩成jpg就完事了