none
COleStreamFile Serialize RRS feed

  • 问题

  • 想在文档中将m_image load的图片转化为二进制 序列化到 文档中,文档还保存了其他数据
    CImage m_image;
    
    CArray < char,char &> m_array;
    .....
     
    void CmyAppDoc::Serialize(CArchive& ar)
    {
     if (ar.IsStoring())
    {
     m_array.Serialize(ar); // others .....
    
     if (!m_image.IsNull())
     {
     	COleStreamFile image_stream ; 	 
     image_stream.CreateMemoryStream(NULL); 			 
     m_image.Save(image_stream.GetStream(), Gdiplus::ImageFormatBMP);
    	image_stream.Serialize(ar);
     }
    else
     {
      .....
     }
    }
    
    用UE打开文件发现图片数据没有保存到文件里面,而m_array可以保存,为什么呢?
    
    如果用
    
    void CmyAppDoc::Serialize(CArchive& ar)
    {
     
    if (ar.IsStoring())
    {
     m_array.Serialize(ar); // others ....
    
     if (!m_image.IsNull())
     {
    
    	IStream* pStream = NULL;
    	CreateStreamOnHGlobal(NULL, TRUE, &pStream); 
    	  m_image.Save(pStream,Gdiplus::ImageFormatBMP); 			
    	HGLOBAL hGlobal = NULL;
    	GetHGlobalFromStream(pStream, &hGlobal); 
    	LPBYTE pBits = (LPBYTE)GlobalLock(hGlobal); 		
    	DWORD size=(DWORD)GlobalSize(pBits);
    	ar << size;
    	ar.Write(pStream,size);
    	GlobalUnlock(hGlobal);
    	pStream->Release(); 
    
     }
     else
     {
      .....
     }
    }
    
    可以保存一些内容,但是貌似数据不正确。
    而又如何 读回来呢?
    
     直接用以下吗?
    		COleStreamFile image_stream ; 
    		image_stream.CreateMemoryStream(NULL); 
    		
    		image_stream.Serialize(ar);
    		image_stream.SeekToBegin();
    		m_image.Load(image_stream.GetStream());
    


    • 已编辑 zzview 2011年1月17日 2:24
    2011年1月13日 6:53

答案

全部回复