|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
Как создать GeoTiff19.09.2025, 00:02. Показов 2239. Ответов 47
Метки нет (Все метки)
Не знаю куда писать, пусть сюда.
Есть bmp файлы (карта) которую генерит прога, и известны географические координаты например 4-х углов, как из этого создать файл GeoTiff наиболее простым способом и желательно встроить в программу на Buildere ? Я так понимаю есть два способа : 1) использовать сторонние библиотеки (GDAL ? ) (как их прикрутить к проекту неясно ) 2) вручную прописать все директории в файле Tiff (так и не нашел внятного описания где там что прописывать) Может кто сталкивался покажет дорогу ?
0
|
|
| 19.09.2025, 00:02 | |
|
Ответы с готовыми решениями:
47
Создать файл GeoTiFF на C++ GeoTiff - примеры ее использования на языке c , желательно на русском языке Как создать динамический массив типа string? Как создать класс такого массива? |
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 00:24 [ТС] | |
|
Вопрос попроще, как можно менять директории в tiff файле ?
Описание GeoTiff подсказали где смотреть https://gis-lab.info/docs/geotiff-1.8.2.pdf Добавлено через 3 часа 43 минуты В общем вопрос переходит : если рассматривать tiff файл как набор байтов, каким образом можно менять отдельные байты в нем а также записывать в любом месте последовательность байт ? Вероятно прочитать его в одномерный массив, поменять что нужно а потом записать обратно ?
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 20.09.2025, 01:49 | ||
|
Любой интерфейс работы с бинарным файлом дает возможность позиционировать на место последующего чтения/записи. Вот только я бы не стал копаться формате TIFF. Как то раз я знакомился, и формат довольно сложный. GeoTiff судя по количеству страниц спецификации, ничуть не проще. Просто уйму времени потратишь.
0
|
||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
||
| 20.09.2025, 09:29 [ТС] | ||
|
У меня простая задача - написать минимальный заголовок для tiff файла и склеить его с данными, потом тоже самое сделать с модификацией для Geo, те заголовок будет всегда один и тот же за исключением координат верхнего левого угла и переменных поворота и масштаба на пиксель. Пока разбираюсь с директориями, дальше заголовка из 8 байт пока не прошел ) Вот например 4 последние байта заголовка это смещение от 0 байта заголовка на первый байт первой директории ? Как то не похоже на примере.
0
|
||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 09:35 [ТС] | |
|
Вот например последние 4 байта равны 5*16=80 бйт от начала те
первый байт первой директории равен 10h те всего 16 полей ?
0
|
|
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 10:10 [ТС] | |
|
А тип первого поля = 0 ?
Может есть какое то внятное описание, я нашел только от А.Самотохина Институт прикладной математики AH CCCР Москва, 1991 г. но там все крайне запутано и все его перепечатывают.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 20.09.2025, 11:01 | ||||
|
По контексту, понимается что это блоки формата файла. Но звучит дико и непонятно. Я бы всё же попытал счастья с GDAL. И либо перешел на MSVC и установил бе её через nuget/vcpkg. Ну или попробовал бы собрать из исходников через cmake для Borland, если уж такая крайняя необходимость (хотя кажется без танцев с бубном в этом случае не обойтись, для Borland). Ну и ещё вариант, использовать консольные утилиты для необходимых преобразований. bmp -> tiff | tiff -> geotiff Судя из этой ссылки это видится вероятно возможным. Добавлено через 5 минут Не по теме: Из последующей статьи из той же ссылки :
:)
0
|
||||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 11:06 [ТС] | |
|
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 20.09.2025, 11:29 | ||
|
Ну мне нечего добавить.
0
|
||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|||
| 20.09.2025, 12:50 [ТС] | |||
|
директория описывает одно изображение, в tiff может быть несколько изображения, для каждого своя директория, директории делятся на поля, по 12 байт, в них указываются все параметры изображения, если не хватает 12 байт в поле есть ссылку где будет более развернутое описание. В представленом файле 50 00 00 00 - > 5*16=80 байт от нуля (сначало идут мл байты) это начало 6й строки начало первой директории -> идет 10 00 -> 1*16= 16 те всего 16 полей по 12 байт в директории, тут директория одна, первая поле далее FE 00 04 00 01 00 00 00 00 00 00 00 те тип = FE 00 ->NewSubfileType далее 00 01 04 00 01 00 00 00 0A 00 00 00 те тип = 00 01 ->ImageWidth, здесь указана ширина 0A те 10 пикселей что верно итд не все так уж и сложно мне всякие сжатия и извращения не нужны, самое простое. Добавлено через 49 секунд Вот нашел более менее внятное описание tiff правда на англицком можно частями переводить более менее понятно https://paulbourke.net/dataformats/tiff/tiff.pdf Добавлено через 1 час 16 минут Как в buildere проще загнать tiff в массив и обратно выгрузить ? Попробую написать для начала читалку всех этих директорий.
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||||
| 20.09.2025, 13:25 | ||||||||
|
Справка: Using Streams, Using File Streams, System.Classes.TMemoryStream От нейронки (@"System.Classes.TMemoryStream from file example c++"):
Читать из него так же как и из файла через System.Classes.TCustomMemoryStream.Read.
1
|
||||||||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
||
| 20.09.2025, 13:28 [ТС] | ||
|
Что то пока не понял а где само изображение в tiff, вот открываю красный квадрат 20х20пикселей, (HxD Editor) сначало заголовок 8 байт, потом непонятная область (выделил) потом все что ниже выделенного это 100% описание директории, получается выделенное это и есть красные пиксели ? Как то они неравномерные ) По размеру вроде все совпадает.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 20.09.2025, 13:35 | |
|
whale2, я ещё раз повторю, там очень мутный формат, ну прям цензура не позволяет описать насколько.
Это не плохо, всё это зачем то было нужно, но самому это ковырять, это просто жесть. Возьми перекур, и на минутку просто ознакомься: https://ru.wikipedia.org/wiki/TIFF Добавлено через 1 минуту Хотя может я и путаю его с каким то другим...
0
|
|
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
||
| 20.09.2025, 13:39 [ТС] | ||
|
а как читать байты из MemStream->Memory не понял ? MemStream->Memory[1] это второй байт итд ?
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||||||||
| 20.09.2025, 14:04 | |||||||||||||
|
Считать второй байт, будет выглядит примерно так:
Можно читать Read, но тут лучше даже ReadBuffer, так как нам нужна гарантия что прочитается ровно необходимое количество байт.. Чем он лучше массива? Для чтения, мало чем, кроме того что можно контролировать выходы за массив и последовательное чтение. Для записи же, намного лучше, так как он ведет себя как поток, можно добавлять данные. Добавлено через 15 минут Ну если слишком сильно хочется всё вручную, каждую блоху ловить, каждый байт считать, но ошибки и баги будет веселей отлавливать. При этом располагая полным набором инструментов?
Тут лучше найти другого куратора по Борланд С++.
1
|
|||||||||||||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 19:26 [ТС] | |
|
Прогресс налицо,
прога читает поля директории, правда только в одностраничном tiff пока сделал по рабочекрестьянскому через FileRead, то что предлагал ИИ не хочет работать.
0
|
|
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 19:42 [ТС] | |
|
Тут лучше
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 20.09.2025, 19:48 | |
|
Исполняемые файлы нет никакого смысла выкладывать.
0
|
|
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
||
| 20.09.2025, 20:05 [ТС] | ||
|
Не совсем понял а где в полях указывается начало самого изображения, оно может быть где угодно, надо порыться и еще с упаковкой байтов изображения тут есть тонкости типа аля компресия на минималках. В принципе у меня картинка всегда одна и та же так что главное понять принцип, можно уже начать изучать GeoTif
0
|
||
|
1 / 1 / 0
Регистрация: 20.10.2011
Сообщений: 227
|
|
| 20.09.2025, 22:47 [ТС] | |
|
Добавлено через 28 минут
Понял как адресуются данные, напишу сюда чтобы не забыть изображение делится на секции по некоторому кол-ву строк, может быть и одна секция на все изображение, кол-во строк в секции задается в RowsPerStrip Tag= 278 если оно равно высоте изображения то значит одна секция, адрес (или сдвиг от начала) для секции задается в StripOffsets Tag= 273 кол-во байт в секции после компрессии задается в StripByteCounts Tag= 279
0
|
|
| 20.09.2025, 22:47 | |
|
Помогаю со студенческими работами здесь
20
Как создать класс кот может создать general purpose counting objects Подскажите, нужно перегрузить оператор или создать метод(если создать то не понимаю как) записи в файл Создать класс vector3d, задаваемый тройкой координат. Создать конструктор. Перегрузить операции как методы класса: Создание кода программы с нуля!! создание кода C++ Создать программу, в которой можно создать папку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|