По предлагаемой ошибке предположу, что текущая глубина экрана не соотвествует глубине экрана библиотеки libqdmapacces.so Допустим текущая глубина экрана = 24 бит-на-пиксел , а глубина экрана библиотеки libqdmapacces.so = 16.
Подскажите в чем еще может быть проблема? Или проблема действительно именно в глубине цветов? Глубину экрана на Астре поменять пока не получается. Возможно ли проверить глубину экрана библиотеки libmapacces.so?
Измнил код drawMap(), чтоб рисовал через mapPaintToXImage.
Код
void MainWindow::drawMap()
{
if(!gContObj.hMap) return;
int cx = 0;
int cy = 0;
int cw = 800;
int ch = 600;
QPainter p;
int x, y;
p.begin(this);
qDebug()<<"mapGetMapScreenDepth = "<<mapGetMapScreenDepth();
int mapdepth = 32;
XIMAGEDESC Ximagedesc;
// Дополнительный параметр mapdepth байт
long allignwidth = cw * (mapdepth / 8 );
long size = allignwidth*ch;
char * bits = ::AllocateTheMemory(size);
int ret;
if (!bits) return;
memset(bits, 0x0, size);
Ximagedesc.Point = bits; // Адрес начала области пикселов
Ximagedesc.Width = cw; // Ширина строки в пикселах
Ximagedesc.Height = ch; // Число строк
Ximagedesc.Depth = mapdepth; // Размер элемента в битах (8,15,16,24,32)
Ximagedesc.CellSize = mapdepth / 8; // размер элемента(пиксела) в байтах
Ximagedesc.RowSize = cw * Ximagedesc.CellSize;// Ширина строки в байтах
RECT RectDraw;
RectDraw.left = cx ;
RectDraw.top = cy ;
RectDraw.right = cx + cw;
RectDraw.bottom = cy + ch;
// Отобразим фрагмент карты в памяти
ret = mapPaintToXImage(gContObj.hMap, &Ximagedesc, 0, 0, &RectDraw);
QImage image((uchar *)bits, cw, ch, QImage::Format_RGB32);
p.drawImage(cx, cy, image, 0, 0, cw, ch);
qDebug()<<"mapPaintToXImage";
FreeTheMemory(bits);
p.end();
}
Ошибку иксов не выдает, но вместо карты рисует черный цвет, грешу на QImage::Format_RGB32 и int mapdepth = 32, но перебрав их комбинации результата не добился, на МСВС как всегда все рисуется отлично( В чем теперь может быть моя проблема?
Oleg Belenkov пишет: А в принципе нужно скачать ГИС Конструктор и ознакомиться с примерами.
Скачал gisdesigner, в примере example/gisdesigner11/Sdk/Qt4 та же самая ситуация - МСВС - все ок, Астра - черный фон, пробовал открывать и свои карты и Podolsk. Буду рад любым вашим идеям.
Как мне кажется тогда бы ничего не собиралось, разве нет?
Все файлы .h (mapdat.h mapold.h mapversn.h mtrapi.h rscapi.h seekapi.h tinbase.h mapapi.h maperr.rh mapsyst.h measure.h tin.h mapcreat.h mapgdi.h maptrace.h rstapi.h sitapi.h mapdata.h mapmacro.h maptype.h tinapi.h )- взяты с МСВС из старой поставки, в этом может быть проблема?
У меня есть operator.deb, я поставил Оператор на Астру СЕ 1.4, и использую библиотеку которую после установки взял из директории /usr/Operator11/libmapacces.so
Карты в самом операторе на Астра СЕ 1.4 открываются нормально.
Ну да, версии Астры не сходятся для достижения цели, но на Астра СЕ 1.2 и Астра 1.3 я получаю тот же результат (черный фон), необходимо чтобы хоть где то заработало, уже будет хорошо, т.к. что то мне подсказывает что проблема одна и та же.
Все верно? или мне попробовать поставить Оператор на 1.3? брать либу оттуда? или может там дополнительно что то куда то прописывается? (на Астру СЕ 1.2 и Астру СЕ 1.3 Оператор не ставил, пользуюсь либой с 1.4)
Для отображения карт по-умолчанию применяется так называемый принтерный вид. Он отображается с применением библиотек Qt, которые могут отсутствовать в чистой версии ОС. Если ГИС Оператор работает, то все необходимые библиотеки есть. Они прописаны в readme.txt в составе инсталляции ГИС Оператор. Применение библиотек из состава ГИС Оператор для написания приложений является нарушением технологии разработки автономных приложений и не диагностируется. Нормальным способом является применение библиотек из состава ГИС Конструктор. Может проблема в том, что компонент отображения карты сам подгружает нужные библиотеки Qt и инициализирует их, может еще в каких действиях. Это потеря времени.
В экранном виде отображения внешние библиотеки не применяются, но качество изображения хуже. В частности, в экранном виде не поддерживается AntiAliasing.