На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

mapPaintMapObjectToDib не рисует в буфер

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: Пред. 1 2 3 След.
RSS
mapPaintMapObjectToDib не рисует в буфер, При отрисовки объекта карты не рисуется в память
 
Есть ли какое-нибудь решение?
 
Здравствуйте.

Поведение повторили.
Изменения войдут в следующую версию GIS ToolKit  - о выходе оповестим Вас в этой теме.

 
Здравствуйте, в версии GTK от 19.03.2021 проблема решена?
 
Здравствуйте.

Исправление было включено в данный выпуск. Пожалуйста, проверьте поведение и сообщите о результатах.
 
Здравствуйте. Проверили работу функции - все без изменений, функция по прежнему не рисует в буфер(ни с начала, ни с конца).
 
Цитата
Максим Казаровец написал:
Здравствуйте. Проверили работу функции - все без изменений, функция по прежнему не рисует в буфер(ни с начала, ни с конца).
Проверим, спасибо!

Ответим в ближайшее время.
 
Здравствуйте.

Выполнили проверку с помощью следующего кода:

Код
#include <iostream>

#include <mapapi.h>
#include <maptype.h>
#include <longstring.h>

typedef struct MYBITMAPFILEHEADER
{
    unsigned short int bfType;
    char               bfSize[4];
    char               bfReserved1[2];
    char               bfReserved2[2];
    char               bfOffBits[4];
}

MYBITMAPFILEHEADER;

int SaveBufToBmpFile(int loadwidth, int loadheight, int bits, const char* inbuf,
                                                            const char* filename)
{
  if ((inbuf == 0) || (filename == 0)) return 0;

  int mywidth = loadwidth;
  int myheight = loadheight;

  // размер сжимаемой области
  int imagebits = bits / 8;
  int myjpgsize = mywidth*myheight*imagebits;
  int widthlen = mywidth*imagebits;

  BITMAPINFOHEADER biheader;
  MYBITMAPFILEHEADER bfheader;

  memset(&bfheader, 0, sizeof(bfheader));

  //инициализация заголовка
  bfheader.bfType = 0x4D42;
  int filesize = 54 + myjpgsize;
  *((long*)(bfheader.bfSize)) = filesize;
  *((long*)(bfheader.bfOffBits)) = 54;

  //инициализация картинки
  biheader.biSize = 40;
  biheader.biWidth = mywidth;
  biheader.biHeight = myheight;
  biheader.biPlanes = 1;
  biheader.biBitCount = bits;
  biheader.biCompression = 0;
  biheader.biSizeImage = myjpgsize;
  biheader.biXPelsPerMeter = 3780;
  biheader.biYPelsPerMeter = 3780;
  biheader.biClrUsed = 0;
  biheader.biClrImportant = 0;

  TLongString buffer;
  buffer.Append((const char *)&bfheader, 14);
  buffer.Append((const char *)&biheader, 40);
  //запись несжатых данных в поток
  char* currentstr = 0;
  for(int ii = 0; ii < myheight; ii++)
  {
    currentstr = (char *)inbuf + widthlen*(myheight - ii - 1);
    buffer.Append((const char *)currentstr, widthlen);
  }
  HANDLE file = OpenTheFile(filename, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, CREATE_ALWAYS);

  if(file == 0)
    return 0;

  long res;
  int ret = WriteTheFile(file, buffer.getString(), buffer.getSize(), &res);
  CloseTheFile(file);
  return ret;
}

HOBJ createGDIObject(HMAP map, long size)
{
  HOBJ hobj = mapCreateObject(map, IDDOUBLE2, 0);
  double x = 6166598.10;
  double y = 7412695.27;
  if (hobj != 0)
  {
    if (mapRegisterDrawObject(hobj, 0, LOCAL_LINE) != 0)
    {
      IMGLINE parm;
      memset((void *) &parm, 0, sizeof(parm));
      parm.Color = 0xFF0000;
      parm.Thick = PIX2MKM(10);
      mapAppendDraw(hobj, IMG_LINE, (const char *) &parm);
      mapAppendPointPlane(hobj, x, y, 0);
      mapAppendPointPlane(hobj, x + size, y, 0);
      mapAppendPointPlane(hobj, x + size, y + size, 0);
      mapAppendPointPlane(hobj, x, y + size, 0);
      mapAppendPointPlane(hobj, x, y, 0);
      mapCommitObject(hobj);
    }
    else
    {
      std::cout << "mapRegisterDrawObject error" << std::endl;
    }
  }
  else
  {
    std::cout << "mapCreateObject error" << std::endl;
  }
  return hobj;
}

void paintMapObj(HMAP map, HOBJ hobj)
{
  DFRAME frame;
  mapGetTotalBorder(map, &frame, PP_PICTURE);

  RECT rect;
  rect.left = frame.X1;
  rect.right = frame.X2;
  rect.top = frame.Y1;
  rect.bottom = frame.Y2;

  XIMAGEDESC desc;
  memset((void *) &desc, 0, sizeof(desc));
  desc.Width = rect.right - rect.left;
  desc.Height = rect.bottom - rect.top;
  desc.Depth = 32;
  desc.CellSize = desc.Depth / 8;
  desc.RowSize = desc.Width * desc.CellSize;
  desc.Point = (char *) malloc(desc.Height * desc.RowSize);

  memset((void *) desc.Point, 0, desc.Height * desc.RowSize);

  mapPaintMapObjectToDib(map, desc.Point, desc.Width, desc.Height, &rect, 0, hobj);

  SaveBufToBmpFile(desc.Width, desc.Height, 32,  desc.Point, "test.bmp");

  free((void *) desc.Point);
}

int main(int, char *[])
{
  constexpr const char16_t *mapName = u"test_paintToDib.sitx";
  constexpr const char16_t *rscName = u"military.rsc";

  // create map
  {
    CREATESITEUN createSite{};
    createSite.Length = sizeof(CREATESITEUN);
    createSite.MapType = 16;
    createSite.Reserve = 0;

    HMAP map = mapCreateSiteUn((const WCHAR *) mapName, (const WCHAR *) rscName, &createSite);
    if (!map)
    {
      std::cout << "failed to create (" << mapName << ", " << rscName << ")" << std::endl;
      return 1;
    }
    mapCloseMap(map);
  }

  // reopen map
  HMAP map = mapOpenAnyData((const WCHAR *) mapName);
  if (!map)
  {
    std::cout << "failed to open (" << mapName << ", " << rscName << ")" << std::endl;
    return 1;
  }

  mapSetRealShowScale(map, 10000.);

  // create new draw object
  {
    HOBJ obj = createGDIObject(map, 1000);
    if (!obj)
    {
      std::cout << "createGDIObject failed" << std::endl;
      return 1;
    }
    mapFreeObject(obj);
  }

  mapSetRealShowScale(map, 25000.);

  // paint the objects
  {
    HOBJ obj = mapCreateObject(map, IDDOUBLE2, 0);

    if (!mapReadObjectByNumber(map, 0, obj, 1, 1))
    {
      std::cout << "mapReadObjectByNumber(1) failed" << std::endl;
    }
    else
    {
      paintMapObj(map, obj);
    }

    mapFreeObject(obj);
  }

  mapCloseMap(map);

  return 0;
}

В полученном файле BMP объект отображен корректно.

 
Цитата
Константин Ганюшин написал:
В полученном файле BMP объект отображен корректно.
Проверили по Вашему примеру - рисуется белая полоса, библиотеки перепроверил, точно крайняя версия от 24.03.2021(GTK Free 13.3.0.3).
 
Пришлите, пожалуйста, полученную карту и файл BMP на почту для проведения диагностики.
 
Цитата
Константин Ганюшин написал:
Пришлите, пожалуйста, полученную карту и файл BMP на почту для проведения диагностики.
Пример выслал на почту.
Страницы: Пред. 1 2 3 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности