很难很难的问题求救~~关于HBITMAP在内存中格式转换~ 本帖最后由 NEW_ONE_GAY 于 2011-05-24 21:15:09 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接用GDI+的Bitmap就可以轻松实现,还说什么“很难很难”?Bitmap bit2(hBitmap, NULL); //从hBitmap创建Bitmap CLSID encoderClsid; EncoderParameters encoderParameters; int quality = 100; // jpeg图象质量 encoderParameters.Count = 1; encoderParameters.Parameter[0].Guid = EncoderQuality; encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong; encoderParameters.Parameter[0].NumberOfValues = 1; encoderParameters.Parameter[0].Value = &quality; if(strExt==_T("jpg")){ GetEncoderClsid(L"image/jpeg", &encoderClsid); }else if(strExt==_T("gif")){ GetEncoderClsid(L"image/gif", &encoderClsid); }else if(strExt==_T("png")){ GetEncoderClsid(L"image/png", &encoderClsid); }else if(strExt==_T("bmp")){ GetEncoderClsid(L"image/bmp", &encoderClsid); }else{ DeleteObject(hBitmap); return;}bit2.Save(strFileName, &encoderClsid, &encoderParameters); DeleteObject(hBitmap); int GetEncoderClsid(LPCWSTR 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 } LS的 我是要 大的HBITMAP 变成 小的HBITMAP 没看那么多代码 就这句 bit2.Save(strFileName, &encoderClsid, &encoderParameters); BMP转JPG谁不会啊???????????????而且你居然用GDI来转 CImage Save函数两行就可以了我需要的是 内存中转换 大字节的HBITMAP变成小字节的HBITMAP 不生成jpg文件 处于内存中HBITMAP格式的jpg图片 不写出jpg图片或许可以不叫他jpg图片 叫他是经过处理的小字节HBITMAP 算了还是直接找jpg图片的算法了 心灰意冷~ GDI+可以直接从内存中读取,也可以保存至内存的。 对就是LS的意思 保存至内存 不写出jpg图片 貌似有头绪了 http://blog.csdn.net/secondfloor/archive/2009/08/13/4443538.aspx 不就是在内存中将bmp转格式?cximage随便实现opencv也可以随便坐据说CImage也行,opengl应该也没问题。不怕麻烦,看看压缩编码,自己写吧 真心求大家分析下我研究了好几通宵的机制对不对啊,还有线程交互数据的变量 是在文件顶头写 还是设置成类的成员更好 如何开发语音识别技术 BCG界面按钮激活的问题. 怎么取出GridCtrl每一个单元格的数据? 如何读注册表的值?? http_verb_put问题 请问如何用vc 来生成 sql触发器?(在线等待) 请问怎样可以获得WIN2K的超级权限(程序)? WM_COMMNOTIFY这是什么消息? 请问关于从html源文件中提取纯文本的算法 keybd_event怎么实现这个功能 ? vc++中,,怎样代码实现窗口层叠、水平平铺、竖直平铺啊??
CLSID encoderClsid;
EncoderParameters encoderParameters;
int quality = 100; // jpeg图象质量
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &quality;
if(strExt==_T("jpg")){
GetEncoderClsid(L"image/jpeg", &encoderClsid);
}else if(strExt==_T("gif")){
GetEncoderClsid(L"image/gif", &encoderClsid);
}else if(strExt==_T("png")){
GetEncoderClsid(L"image/png", &encoderClsid);
}else if(strExt==_T("bmp")){
GetEncoderClsid(L"image/bmp", &encoderClsid);
}else{
DeleteObject(hBitmap);
return;
}
bit2.Save(strFileName, &encoderClsid, &encoderParameters);
DeleteObject(hBitmap);
int GetEncoderClsid(LPCWSTR 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
}
没看那么多代码
就这句 bit2.Save(strFileName, &encoderClsid, &encoderParameters);
BMP转JPG谁不会啊???????????????而且你居然用GDI来转 CImage Save函数两行就可以了我需要的是 内存中转换 大字节的HBITMAP变成小字节的HBITMAP 不生成jpg文件 处于内存中HBITMAP格式的jpg图片 不写出jpg图片或许可以不叫他jpg图片 叫他是经过处理的小字节HBITMAP 算了还是直接找jpg图片的算法了 心灰意冷~
cximage随便实现
opencv也可以随便坐
据说CImage也行,opengl应该也没问题。
不怕麻烦,看看压缩编码,自己写吧