使用Libtiff拼接许多图像

时间:2013-11-27 09:21:28

标签: c++ image file tiff libtiff

我想在一个不同位置的大图像中复制许多图像,然后将其保存到.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,我必须避免在RAM中创建大图像,所以我需要将图像逐个写入文件(仅限同时在RAM中的一个图像)我试图用libtiff做到这一点。

或者另一个简单的例子:我有主图像M(10000,10000),我有一些图像m1(200,200),我需要在位置(200,300)将图像m1写入M

0 个答案:

没有答案