DrawToStream method (MapDoc)

Запись фрагмента карты в виде растрового изображения в поток IStream (bmp, jpg, gif, png).

Применяется к:

MapDoc

Синтаксис:

Visual Basic:

Function DrawToStream(Width As Long, Height As Long, Xc As Double, Yc As Double, Scale As Double, RasterType As Long, Stream As Unknown) As Boolean

Width - ширина изображения в пикселах.

Height - высота изображения в пикселах.

Xc, Yc - центр изображения в координатах местности.

Scale - масштаб отображения.

RasterType - параметр, определяющий формат растрового файла:

0 - BMP,

1 - JPG,

2 - GIF,

4 - PNG,

Stream - COM-интерфейс IStream для записи изображения.

Описание:

Масштаб задается в единицах карты на точку изображения - так же, как у свойства MapScale вида карты: чем больше число, тем мельче рисунок. Чтобы участок карты шириной W единиц занял на изображении N точек, масштаб берут равным W / N.

Точка (Xc, Yc) попадает в середину изображения.

В макросе на VBScript потоком служит ADODB.Stream, открытый в двоичном режиме; изображение из него сохраняют в файл методом SaveToFile. Метод рисует и у карты, созданной отдельно от окон ZuluGIS.

В макросах на python метод недоступен: объект-поток создать нечем - ни win32com, ни comtypes в поставке нет.

Пример:

Пример рисует всю карту в поток так, чтобы она заняла 500 точек по ширине, и сохраняет изображение в файл.

Visual Basic:

Sub MapDoc_DrawToStream
'Берем рабочую карту
Set Doc = Zulu.ActiveMapDoc
Set R = Doc.GetBoundsRectangle
'Центр карты и масштаб: ширина карты по Y ложится в 500 точек
Xc = (R.Xmin + R.Xmax) / 2
Yc = (R.Ymin + R.Ymax) / 2
Sc = (R.Ymax - R.Ymin) / 500
'Двоичный поток для изображения
Set st = CreateObject("ADODB.Stream")
st.Type = 1
st.Open
If Doc.DrawToStream(600, 600, Xc, Yc, Sc, 4, st) Then
  S = "Масштаб " & Round(Sc, 2) & ", в потоке байт: " & st.Size
  st.SaveToFile "C:\Data\map.png", 2
Else
  S = "Не удалось получить изображение"
End If
st.Close
MsgBox S
End Sub