下面的代码在有些机器上是正常的,有些机器则转换失败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,不知是什么原因引起

解决方案 »

  1.   

    这个问题我也碰到过,你的程序运行时必须判断一下客户机上的GDI+版本,最简单的就是安装时,把你开发中使用的GDI+库复制到客户机上。
      

  2.   

    如果要控制文件大小,可以通过encoder的参数来控制。详细信息请阅读GDI+帮助。
    你的图片大小,颜色深度,压缩等级,等等信息都能影响到你最终保存的文件大小。
      

  3.   

    windows目录下的GdiPlus.dll全部都已替换并重启了,还是不行
      

  4.   

    是吗?没具体用个文件格式的转换,只是用GDI+画了点图
      

  5.   

    Win32Error
    我觉得一般都是因为错误的保存参数引起的。我这台机器上的GDIPLUS.dll的版本号为5.2.3790.1830。
    BMP编码器支持的参数为“ 0 ”!
    LZ,你的错误可能就是这个引起的。那些出错的机器应该和我的机器一样,GDI+当前版本中的BMP编码器并不支持任何参数。 
    在保存前,最好需要查询一下当前机器的GDI+编码器所支持的参数个数与具体参数类型。