首页 > 代码库 > 使用GDI+轻松创建缩略图
使用GDI+轻松创建缩略图
Gdi+ 还是相当好用的.
1> Image保存图像,需要一个CLSID的参数,它可以这样获得:
[cpp] view plaincopy
- int 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; // Failure
- }
2> Image::Save的另外一个参数EncoderParameters可用于图像的压缩*(这是从网上抄下来的)
使用img/jpeg配合encoderParameters.Parameter[0].Value设置 可以大幅度的减小图像文件所占磁盘空间
[cpp] view plaincopy
- // 保存到文件
- EncoderParameters encoderParameters;
- //构造编码参数列表
- //数组中只包含一个EncoderParameter对象
- encoderParameters.Count = 1;
- encoderParameters.Parameter[0].Guid = EncoderQuality;
- //参数类型为LONG
- encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
- //只设置一个参数
- encoderParameters.Parameter[0].NumberOfValues = 1;
- ULONG quality;
- //压缩JPEG图片质量为原来的80%
- quality = 80;
- encoderParameters.Parameter[0].Value = &quality;
3> 关于缩略图
我使用了一下Image的GetThumbnailImage,发现对于某些图像效果很不理想,(颜色较鲜艳的缩略图效果好点,但是对于那些色差不大整体又暗的图像效果就差劲了). 这个时候使用Graphic配合Bitmap直接画缩略尺寸的图像效果挺好
[cpp] view plaincopy
- BOOL QImgProcess::CreateThumb( int cx ,QBuf &out)
- {
- ASSERT(m_pImg != NULL);
- // 创建缩略图
- int nWidth = m_pImg->GetWidth();
- if (cx >= nWidth)
- {
- return TRUE;
- }
- int nHeight = m_pImg->GetHeight();
- int nThumbHeight = nHeight * cx / m_pImg->GetWidth() ;
- Bitmap bitmap(cx, nThumbHeight, PixelFormat24bppRGB);
- Graphics graph(&bitmap);
- graph.DrawImage(m_pImg, Rect(0,0,cx,nThumbHeight));
- ......
- }
使用GDI+轻松创建缩略图
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。