SASGIS - SAS.Планета
View Issue Details
0000377SAS.Планета[All Projects] Багpublic20-01-2011 03:2310-10-2012 11:50
Parasite 
zed 
normalmajoralways
closedfixed 
WindowsXPSP3
110216 
120808120808 
0000377: При попытке сведения в BMP не учитываются лимиты файла
При попытке сведения достаточно большой области в BMP - не учитываются лимиты файла (2Gb). Программа упорно пытается утоптать территорию в файл, коя территория не влезет в максимально возможный BMP даже теоретически. Ну и соответственно падает с еррором I\O 131.

Гораздо правильнее было бы предварительно обсчитывать получающийся размер финального BMP, и если результат получается больше 2Gb - то либо предупреждать пользователя (без старта процесса сведения, ибо толку все равно не будет - а будет еррор), либо автоматически разбивать эту область на несколько раздельных BMP и сводить по одному (благо что такая опция в программе есть, осталось только автоматически вставлять туда нужные для данной склейки значения и так и сводить), либо предлагать выбрать какой-либо другой формат файла (не BMP, а например RAW без лимитов по размерам).
Про RAW - тут: http://sasgis.org/mantis/view.php?id=295
Попытаться склеить в БМП какую-нибудь карту из 30-50тыс тайлов (в один файл)... :)
bmp, ограничения, склейка
related to 0000169closed zed Out of memory при склейке большого файла 
related to 0001014closed zed Сохранение картинки в формате BMP до 4 гигабайт 
related to 0001213closed vdemidov Склеивание BMP больше 32767x32767 
Issue History
20-01-2011 03:23ParasiteNew Issue
10-03-2011 21:09vdemidovStatusnew => acknowledged
10-03-2011 21:10vdemidovProduct Version => 110216
10-03-2011 21:10vdemidovTarget Version => 26xxxx
11-03-2011 07:23gpsMaxTag Attached: склейка
11-03-2011 07:23gpsMaxTag Attached: bmp
07-04-2011 02:22gpsMaxRelationship addedrelated to 0000169
07-04-2011 02:26gpsMaxNote Added: 0001586
07-04-2011 02:26gpsMaxNote Added: 0001587
07-04-2011 02:27gpsMaxNote Deleted: 0001587
07-04-2011 02:28gpsMaxNote Edited: 0001586bug_revision_view_page.php?bugnote_id=1586#r601
07-04-2011 02:29gpsMaxNote Edited: 0001586bug_revision_view_page.php?bugnote_id=1586#r602
07-04-2011 05:31ParasiteNote Added: 0001591
07-04-2011 11:02gpsMaxNote Added: 0001595
07-04-2011 11:03gpsMaxNote Edited: 0001595bug_revision_view_page.php?bugnote_id=1595#r615
09-04-2011 14:33gpsMaxTag Attached: ограничения
11-04-2011 07:10vdemidovStatusacknowledged => confirmed
19-10-2011 18:36zedNote Added: 0004115
19-10-2011 18:42zedNote Edited: 0004115bug_revision_view_page.php?bugnote_id=4115#r2087
20-10-2011 03:15ParasiteNote Added: 0004118
20-10-2011 03:57gpsMaxRelationship addedrelated to 0001014
20-10-2011 05:56zedNote Added: 0004121
20-10-2011 06:35bk99Note Added: 0004122
20-10-2011 06:36zedNote Added: 0004123
18-12-2011 16:44zedAssigned To => zed
18-12-2011 16:44zedStatusconfirmed => feedback
03-01-2012 10:44zedStatusfeedback => resolved
03-01-2012 10:44zedFixed in Version => 24xxxx
03-01-2012 10:44zedResolutionopen => fixed
23-01-2012 08:22vdemidovFixed in Version24xxxx => 120808
23-01-2012 08:22vdemidovTarget Version26xxxx => 120808
22-03-2012 08:23gpsMaxRelationship addedrelated to 0001213
10-10-2012 11:50TolikStatusresolved => closed

Notes
(0001586)
gpsMax   
07-04-2011 02:26   
(edited on: 07-04-2011 02:29)
Бага схожа со 169 в том смысле, что хорошо бы перед началом склейки примерно посчитать результирующий объём, и при превышении лимита формата/памяти, не начиная склейку, сразу отказываться с выдачей сообщения пользователю.

(0001591)
Parasite   
07-04-2011 05:31   
>Кстати, лимит в 2 гигабайта на файл присутствует только в FAT32, но не в NTFS.
А разве на NTFS живут какие-то другие BMP? :)

Бага (данная конкретная) связана не с размером файла на диске, а с переполнением значений в хидере BMP-файла (подробнее - тут: http://en.wikipedia.org/wiki/BMP_file_format)
В частности, под размер битмапа выделено 4 байта, то есть ВЕСЬ файл не может превышать 7F FF FF FF байт (2 147 483 647 #dec, где самый старший бит - знаковый в виндявом INTe. Впрочем, даже если бы его не было - лимит был бы уже в 4Гб, а это для битмапа без сжатия - тоже весьма немного).

В RAW, господа, в RAW... :)
(0001595)
gpsMax   
07-04-2011 11:02   
(edited on: 07-04-2011 11:03)
Про NTFS - я уже понял, что ошибся, и удалил это своё замечание, через минуту после написания :-)

(0004115)
zed   
19-10-2011 18:36   
(edited on: 19-10-2011 18:42)
Вот тут http://www.fileformat.info/format/bmp/egff.htm пишут:

typedef struct _WinBMPFileHeader
{
    WORD FileType; /* File type, always 4D42h ("BM") */
    DWORD FileSize; /* Size of the file in bytes */
    WORD Reserved1; /* Always 0 */
    WORD Reserved2; /* Always 0 */
    DWORD BitmapOffset; /* Starting position of image data in bytes */
} WINBMPFILEHEADER;

В этой структуре, под размер файла отведён тип DWORD (беззнаковое, целое). Т.е. лимит у BMP должен быть в 4Гб.

И ещё пишут, что Maximum Image Size: 32Kx32K and 2Gx2G pixels, т.е. либо миллиард пикселей, либо 4 Гб.

Так что, у кого железо позволяет, попробуйте завтра на ночной сборке создать BMP по-больше, и открыть его чем-нибудь 64-х битным.

(0004118)
Parasite   
20-10-2011 03:15   
>Т.е. лимит у BMP должен быть в 4Гб.
Вроде vdemidov упоминал именно про 2Гб в винде. Надо посмотреть в хистори.
Вопрос не в размере битмапа как таковом - а в предварительном обсчете оного размера и автоматическом разбиении на части, если вылазим за лимиты. К коим лимитам хотелось бы еще приписать и собственно размер одного битмапа по пикселям, а не по байтам - FFFF/FFFF пикс, если селекшн на сведение больше этого размера и именно в бмп - таки придется разбивать в любом случае...

PS: что же касалось именно размера - на момент создания тикета программа НЕ СОЗДАВАЛА bmp выше 1.34Gb размером, я специально проверял пытаясь свести большую картинку. Если должно было быть выше 1.34Gb - то тот же еррор i/o 131. Текущие версии - не знаю, не тестил.

PPS: а может просто отказаться от bmp? Мороки с ним - много, а толку от него - вообще нет. Хай в ECW сводят, а оттуда если приспичит - можно конвертить в bmp сторонними, более продвинутыми средствами....? Лучше вместо него прикодить BigTiff\geoTiff.... :)
(0004121)
zed   
20-10-2011 05:56   
>Текущие версии - не знаю, не тестил
А ты потести. Там и проверка стоит и большие bmp нормально создаются.
(0004122)
bk99   
20-10-2011 06:35   
>Текущие версии - не знаю, не тестил
Народ ждёт стэйбл... Тогда и непоняток меньше будет.
(0004123)
zed   
20-10-2011 06:36   
Чтоб появился стэйбл, нужно оттестить и пофиксить баги у ночнушек.