下面的代码在有些机器上是正常的,有些机器则转换失败BYTE* Convert(BYTE * pSrc, int nLen)//pSrc是jpeg流
{
COleStreamFile* m_pImageStream = new COleStreamFile;
if (!m_pImageStream->CreateMemoryStream(NULL))
{
delete m_pImageStream;
m_pImageStream = NULL;
return NULL;
}
m_pImageStream->Write(pSrc, nLen);
Image img(m_pImageStream->GetStream());
m_pImageStream->GetStream()->Release();
delete m_pImageStream; COleStreamFile image_stream;//保存24位bmp的流
image_stream.CreateMemoryStream(NULL); CLSID jpgClsid;
if (!GetEncoderClsid(L"image/bmp", &jpgClsid))
{
image_stream.GetStream()->Release();
return NULL;
}
//设置质量
EncoderParameters encoderParameters;
ULONG nValue = 24;
//构造编码参数列表
//数组中只包含一个EncoderParameter对象
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderColorDepth;
//参数类型为LONG
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
//只设置一个参数
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &nValue; Status srs = img.Save(image_stream.GetStream(), &jpgClsid, &encoderParameters);
}
在一些系统上,img.Save的返回值是Win32Error,不知是什么原因引起
{
COleStreamFile* m_pImageStream = new COleStreamFile;
if (!m_pImageStream->CreateMemoryStream(NULL))
{
delete m_pImageStream;
m_pImageStream = NULL;
return NULL;
}
m_pImageStream->Write(pSrc, nLen);
Image img(m_pImageStream->GetStream());
m_pImageStream->GetStream()->Release();
delete m_pImageStream; COleStreamFile image_stream;//保存24位bmp的流
image_stream.CreateMemoryStream(NULL); CLSID jpgClsid;
if (!GetEncoderClsid(L"image/bmp", &jpgClsid))
{
image_stream.GetStream()->Release();
return NULL;
}
//设置质量
EncoderParameters encoderParameters;
ULONG nValue = 24;
//构造编码参数列表
//数组中只包含一个EncoderParameter对象
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderColorDepth;
//参数类型为LONG
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
//只设置一个参数
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &nValue; Status srs = img.Save(image_stream.GetStream(), &jpgClsid, &encoderParameters);
}
在一些系统上,img.Save的返回值是Win32Error,不知是什么原因引起
你的图片大小,颜色深度,压缩等级,等等信息都能影响到你最终保存的文件大小。
我觉得一般都是因为错误的保存参数引起的。我这台机器上的GDIPLUS.dll的版本号为5.2.3790.1830。
BMP编码器支持的参数为“ 0 ”!
LZ,你的错误可能就是这个引起的。那些出错的机器应该和我的机器一样,GDI+当前版本中的BMP编码器并不支持任何参数。
在保存前,最好需要查询一下当前机器的GDI+编码器所支持的参数个数与具体参数类型。