Добрый вечер. Пытаемся портировать функционал написанного проекта из Windows 10 (MAPAPI 13 версии, Qt 5) в Astra Linux 1.6 используем ГИС Конструктор FREE для QtDesigner x64 Включая компонент 3D-модели (версия 12.6.1, Qt4, Qt5, ОС Astra Linux SE, релиз Смоленск). Среда разработки Qt Creator. В Windows 10 проблем с сохранением карты в формат JPG, BMP, TIF нет.
Пытаюсь сохранить карту в формат JPG, BMP, TIF для этого использую функцию LoadMapToPictureFileUn
Код
//координаты района
DFRAME dframe = borderClass->getPrintingAreaCorners();
typedef long int (WINAPI * F_LoadMapToPictureFileUn)(HMAP map, HMESSAGE handle,
DFRAME * dframe, int bitCount,
int scale, int resolution,
const WCHAR* filename, int flagIntergraphTIFF,
int flagCompress,
HMESSAGE handleMainWin, int flafAdjustMode);
F_LoadMapToPictureFileUn lpfn_LoadMapToPictureFileUn = (long int (WINAPI *)(HMAP map, HMESSAGE handle,
DFRAME * dframe, int bitCount,
int scale, int resolution,
const WCHAR* filename, int flagIntergraphTIFF,
int flagCompress,
HMESSAGE handleMainWin, int flafAdjustMode))
mapLoadLibrary(MAPPICEXLIB, &libinstSaveToPic, "LoadMapToPictureFileUn");
if (lpfn_LoadMapToPictureFileUn == 0)
{
if (libinstSaveToPic) mapFreeLibrary(libinstSaveToPic);
qDebug() << "Ошибка! Библиотека не загружена";
}
long bitcount = 24;//32
long resolution = 200;
QString suffix = fileName.split(".").last();
int flagCompress = 0;
if(suffix == "jpg")
flagCompress = 100; //При сохранении файла JPG - Коэффициент качества изображения при сжатии JPEG (0-100)
else if (suffix == "tif")
flagCompress = 1; //При сохранении файла TIFF - Флаг сжатия изображения (0- не применять сжатие, 1 - сжатие PackBit)
auto ret = (*lpfn_LoadMapToPictureFileUn)(hMap, 0, &dframe,
bitcount, scale,
resolution, reinterpret_cast<const WCHAR *>(fileName.constData()), 0, flagCompress, 0, 0);
if (ret == 0)
qDebug() << "Ошибка! Функция не запущена. Неверные параметры запуска." ;
При сохранении карты в формат JPG, BMP, если указать кол-во бит на пиксель сохраняемого изображения 24, то на выходе получаю черно-белое изображение карты.
При сохранении карты в формат JPG, BMP, если указать кол-во бит на пиксель сохраняемого изображения 32, то на выходе получаю цветное изображение карты, но с вертикальными линиями, которых не должно быть на карте.
При попытке сохранить в TIF программа аварийно завершается. Подскажите, в чем может быть дело?
Александр написал: При сохранении карты в формат JPG, BMP, если указать кол-во бит на пиксель сохраняемого изображения 24, то на выходе получаю черно-белое изображение карты.
Не можем посмотреть скриншоты. Просьба прикрепить еще раз в другом формате. Или пришлите на почту технической поддержки КБ Панорама <panorama@gisinfo.ru>
Предположительно полосы могут быть, когда ширина изображения не кратна 32. Есть функция формирования изображения в памяти типа PaintToXImage. Далее средствами Qt можно сохранить изображение в любой формат. TIF можно сохранять через функции библиотеки GDAL. Кроме того, можно обновить версию ГИС Конструктор до 13-ой. Исходные тексты библиотек те же, что в Windows.
Oleg Belenkov написал: Кроме того, можно обновить версию ГИС Конструктор до 13-ой. Исходные тексты библиотек те же, что в Windows.
В 13 версии, если указать кол-во бит на пиксель сохраняемого изображения 24, то на выходе получаю черно-белое изображение с искажениями, но при указании 32 бит - файлы (jpg, bmp, tif) сохраняются без видимых искажений.
Столкнулись с еще одним искажением при сохранении карты, которое заключается в частичном сохранении надписи в выходном файле (проявляется во всех форматах сохраняемого файла). В Windows 10 проблем с сохранением карты нет.
Скриншот, демонстрирующий нанесенную на карту надпись: при сохранении карты в файл получаем:
Александр написал: Столкнулись с еще одним искажением при сохранении карты, которое заключается в частичном сохранении надписи в выходном файле (проявляется во всех форматах сохраняемого файла).В Windows 10 проблем с сохранением карты нет.
Попробуйте выполнить сортировку карты (Главное меню - Задачи- Сортировка). Если проблема после сортировки останется просьба прислать пример данных (карту в формате sxf и классификатор). Так будет быстрее увидеть и поправить ошибку.