我想将很多图像复制到一个大图像中的不同位置,然后将其保存到.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),我需要将图像 m1 写入位置 (200,300) 的 M