自己写远程控制软件之图像压缩
由于要压缩成 JPG 文件,我用的是 Intel ilj 库,别说你没听过哦,可压缩 YUYV和 Bmp,以下是我的 JpegEncoder,
使用简单,接口清晰,谁用谁知道。至于在客户端显示 JPG,我就交给 OleLoadPicture 了,因为 ilj 在解压的时候,有时会内存泄露,但是 OleLoadPicture 在使用时会有个问题就是如果 JPG 文件本身有问题,会造成 OleLoadPicture 死锁,我查了一下,据说是 Microsoft 的 BUG,这么长时间了也不知道 Fix 没有。不过 OleLoadPicture 死锁在这个程序是不太可能出现的,我说的是我在公司的情况,细节我就不说了。
#ifndef JPEGEncoder_H
#define JPEGEncoder_H//#include //#include "ijl.h"//#pragma comment(lib, "ijl15l.lib")//template
class JPEGEncoderT
{
public:JPEGEncoderT(){ijlInit(&m_jpeg);}~JPEGEncoderT(){ijlFree(&m_jpeg);}//IJLERR Encode(DWORD dwWidth, DWORD dwHeight, LPVOID lpRGBSrc, DWORD dwSrcLength, LPVOID lpJPEGDst, DWORD dwDstLength, LPDWORD lpJPEGSize, DWORD dwBitCount){DWORD dwByteCount = dwBitCount / 8;if (lpRGBSrc == NULL || lpJPEGDst == NULL || dwSrcLength == 0 || dwDstLength == 0 || lpJPEGSize == NULL) {return IJL_MEMORY_ERROR;}if (dwDstLength < (dwWidth * dwHeight)) {return IJL_BUFFER_TOO_SMALL;}IJLERR ijlError = IJL_RESERVED;m_jpeg.upsampling_reqd = FALSE;m_jpeg.cconversion_reqd = FALSE;m_jpeg.DIBBytes = (LPBYTE) lpRGBSrc;m_jpeg.JPGBytes = (LPBYTE) lpJPEGDst;m_jpeg.DIBWidth = dwWidth;m_jpeg.DIBHeight = -dwHeight;m_jpeg.JPGWidth = dwWidth;m_jpeg.JPGHeight = dwHeight;m_jpeg.DIBSubsampling= IJL_NONE;m_jpeg.JPGFile = NULL;m_jpeg.JPGSizeBytes = dwDstLength;m_jpeg.jquality = 100;//m_jpeg.DIBChannels = dwByteCount;m_jpeg.JPGChannels = dwByteCount;m_jpeg.DIBPadBytes = IJL_DIB_PAD_BYTES(m_jpeg.DIBWidth, dwByteCount);switch (dwBitCount) {case 24:m_jpeg.DIBColor = IJL_BGR;m_jpeg.JPGColor = IJL_YCBCR;m_jpeg.JPGSubsam
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
