3 часа разбирался как это в C# реализовать.
Разобрался =), вот код если кому еще потребуется...
class Map
{
[DllImport("OLE32.DLL", EntryPoint = "CreateStreamOnHGlobal")]
extern public static Int32 CreateStreamOnHGlobal(System.IntPtr hglobal, bool fDeleteOnRelease, out UCOMIStream pOutStm);
(...)
Image GetIMG(...)
{
UCOMIStream stream = null;
int res = Map.CreateStreamOnHGlobal(IntPtr.Zero, true, out stream);
if(res != 0)
return null;
bool flag = mapDoc.DrawToStream(w, h, cX, cY, scale, 0, stream);
if(!flag)
return null;
System.Runtime.InteropServices.STATSTG stat;
stream.Stat(out stat, 0);
byte[] buffer = new byte[stat.cbSize];
// Обязательная строка. После возвращения стрима позиция в конце
stream.Seek(0, 0, System.IntPtr.Zero); // Из за этой строчки лишний час разбирался
stream.Read(buffer, (int)stat.cbSize, System.IntPtr.Zero);
Image img = Image.FromStream(new System.IO.MemoryStream(buffer));
return img;
}
}