本文整理汇总了C++中Memory::SetUseSysMemory方法的典型用法代码示例。如果您正苦于以下问题:C++ Memory::SetUseSysMemory方法的具体用法?C++ Memory::SetUseSysMemory怎么用?C++ Memory::SetUseSysMemory使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Memory
的用法示例。
在下文中一共展示了Memory::SetUseSysMemory方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Save
int Image::Save(Memory<char>& mem,LPCWSTR type,long quality){
if(_image==0) return 0;
CLSID clsid;
//未知原因,如果不用一个变量转换一下,type是一个常量字串的话,如果把 type 直接传给 GetImageEncoderClsid 会引起程序崩溃。
//wchar_t tp[256];
//这样也不行。
//cs::WcsCopy(tp,type);
cs::String tp = type;
if(!GetImageEncoderClsid(tp,&clsid)) return 0;
if(quality>100) quality = 100;
if(quality<0) quality = 0;
Gdiplus::EncoderParameters eps;
eps.Count = 1;
eps.Parameter[0].Guid = Gdiplus::EncoderQuality;
eps.Parameter[0].NumberOfValues = 1;
eps.Parameter[0].Type = Gdiplus::EncoderParameterValueTypeLong;
eps.Parameter[0].Value = &quality;
IStream* stream;
if(FAILED(CreateStreamOnHGlobal(0,1,&stream))) return 0;
if(((_Image*)_image)->Save(stream,&clsid,&eps)!=0) return 0;
ULONG ws = 0;
LARGE_INTEGER li;
ULARGE_INTEGER npos;
li.QuadPart = 0;
stream->Seek(li,STREAM_SEEK_END,&npos);
if(mem.Length()<npos.LowPart){
mem.SetUseSysMemory(1);
if(!mem.SetLength(npos.LowPart)) return 0;
}
stream->Seek(li,STREAM_SEEK_SET,0);
HRESULT ret = stream->Read(mem.Handle(),mem.Length(),&ws);
stream->Release();
if(FAILED(ret)) return 0;
return ws;
}