Алгоритм сжатия блоков матрицы (без потерь точности) - авторский алгоритм (не опубликован). Позволяет сжимать данные от 3 раз и более (зависит от качества матрицы и точности хранения: мм,см,дм,м).
Доступ к данным необходимо выполнять функциями:
Код |
---|
// Чтение прямоугольного участка матрицы в заданную область памяти
// hMap - идентификатор открытой матричной карты (TMapAccess *)
// number - номер файла в цепочке
// bits - указатель на начало области памяти
// left - смещение участка матрицы слева (в элементах)
// top - смещение участка матрицы сверху (в элементах)
// width - ширина участка матрицы (в элементах)
// height - высота участка матрицы (в элементах)
// widthinbyte - ширинa участка матрицы в байтах
// Размер участка, заданного адресом bits, должен быть не менее
// (width * height * размер элемента матрицы в байтах),
// в противном случае возможны ошибки работы с памятью.
// Запрос размера элемента матрицы в байтах
// - функция mapGetMtrElementSize.
// Высоты участка записываются в область bits в единицах измерения
// значений высот данной матрицы.
// Запрос единицы измерения значений высот матрицы
// - функция mapGetMtrMeasure.
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetMtrFrame(HMAP hMap, long int number, char* bits, long int left, long int top,
long int width, long int height,long int widthinbyte);
// Вывод прямоугольного участка матрицы
// hMap - идентификатор открытой матричной карты (TMapAccess *)
// number - номер файла в цепочке
// bits - адрес логического начала выводимого участка
// (см. beginning)
// left - смещение участка матрицы слева (в элементах)
// top - смещение участка матрицы сверху (в элементах)
// width - ширина участка матрицы (в элементах)
// height - высота участка матрицы (в элементах)
// beginning - определяет, на какую строку указывает bits :
// если beginning == 0, то bits указывает
// на начало верхней строки выводимого участка
// если beginning == 1, то bits указывает
// на начало нижней строки выводимого участка.
// Размер участка, заданного адресом bits, должен быть не менее
// (width * height * размер элемента матрицы в байтах),
// в противном случае возможны ошибки работы с памятью.
// Запрос размера элемента матрицы в байтах
// - функция mapGetMtrElementSize.
// Высоты выводимого участка должны быть записаны
// в области bits в единицах измерения высот данной матрицы.
// Запрос единицы измерения высоты матрицы
// - функция mapGetMtrMeasure.
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapPutMtrFrame(HMAP hMap, long int number, char* bits, long int left, long int top,
long int width, long int height, long int beginning);
|