RUS  ENG 

Как использовать MapDoc.DrawToStream(...)?

Страницы: 1
RSS
Как использовать MapDoc.DrawToStream(...)?
 
Пишу на C#.
Как использовать функцию?
Мне нужно чтоб кусок карты отрисовался в память.
Какого типа использовать Stream.
И какого размера.

Входные параметры такие же как при DrawToRaster()?
 
Да, параметры те же, что и у DrawToRaster. В поток пишется то же что и в растровый файл.
А Stream это интерфейс IStream. Самому создавать можно по-разному. Например на C++ можно так создать.
IStream *Stream;
CreateStreamOnHGlobal( NULL, TRUE, &Stream);
 
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;
}
}
Страницы: 1