Я хочу скопировать много изображений в одно большое изображение в разных местах и затем сохранить его в .tif, но я не хочу хранить их в памяти сразу, поэтому мне нужно определить файл TIFF, сохраненный на диске, и затем записать мои изображения по одному.
я использую LibTIFF. Проблема в том, что я не вижу метода, который может записывать пиксели по какому-либо адресу со смещением, например
RGB* p= init_pointer+dy*width+dx
Есть ли решение? (Может быть, я должен создать только двоичный файл и написать заголовок самостоятельно, но это сложный путь, может быть, libtiff может сделать это проще?)
Итак, если я перефразирую свой вопрос: как получить необработанный указатель на данные формата tiff, хранящиеся на диске, для записи данных пикселей?
Например, я могу создать файл на диске и написать заголовок вручную, а затем записать мои изображения со смещением, используя необработанный указатель, что-то вроде:
FILE* f = _tfopen(fileName, _T("wb"));
uint64 fileSize = headerSize + (uint64)im.Width() * im.Height() * (grayscale ? 1 : 3);
// Allocate file space
if( _fseeki64(f, fileSize - 1, SEEK_SET) == 0 &&
fputc(0, f) != EOF )
{
_fseeki64(f, 0, SEEK_SET);
// Write header
//write img using pointer with offset
int64 posPixels = headerSize + (rc.top - rcClip.top) * width + (rc.left - rcClip.left);
Еще раз: мне нужно написать много изображений в одно изображение в формате TIFF, как это http://upload.wikimedia.org/wikipedia/commons/a/a0/Rochester_NY.jpg и я должен избегать создания большого изображения в ОЗУ, поэтому мне нужно записывать изображения одно за другим в файл (только одно изображение в ОЗУ одновременно), и я пытаюсь сделать это с помощью libtiff.
Или другой простой пример: у меня есть основное изображение M (10000,10000), и у меня есть какое-то изображение m1 (200,200), и мне нужно записать изображение m1 в M в местоположении (200,300)
Задача ещё не решена.
Других решений пока нет …