Можно ли обработать полное изображение в виде мозаики, сохраняя каждый раз только одну плитку в памяти? - PullRequest
0 голосов
/ 09 октября 2018

У меня простая проблема.Я обрабатываю огромные изображения (> 4 ГБ), и при загрузке всех из них в память я заполняю ОЗУ, и программа уничтожается.Я попытался сохранить их как мозаичные файлы и затем использовать libtiff для загрузки их по частям следующим образом:

tdata_t buf = _TIFFmalloc(TIFFTileSize(tifSrc));
for(int i = 0;i< 20000;i+=128){
        for(int j = 0;j< 20000;j+=128)
        {
                TIFFReadTile(tifSrc, buf , i, j, 0,0);
                TIFFWriteTile(tifDst, (tdata_t)buf , i, j,0, 0);
        }
}
_TIFFfree(buf);

Но я ожидал, что приведенный выше код будет загружать в память только одну плитку за итерацию (128x128байт), вместо этого сохраняется все изображение ... Кто-нибудь знает, как я могу загрузить в память только одну плитку?

1 Ответ

0 голосов
/ 18 ноября 2018

Чтобы ответить на мой собственный вопрос, вы должны сначала назначить теги TIFFTAG_TILEWIDTH и TIFFTAG_TILELENGTH следующим образом:

TIFFSetField(tiff, TIFFTAG_TILEWIDTH, (uint32)128);
TIFFSetField(tiff, TIFFTAG_TILELENGTH, (uint32)128);

Затем функции чтения и записи завершаются успешно, возвращая «0», и загружается только плитка 128x128.в память!

...