gpt4 book ai didi

c++ - 使用 LibTiff 逐像素写入 tif?

转载 作者:行者123 更新时间:2023-11-30 03:47:41 28 4
gpt4 key购买 nike

是否可以通过逐像素迭代并为每个像素设置 RGB 值来创建新的 tif?

让我解释一下我正在尝试做什么。我正在尝试打开现有的 tif,使用 TIFFReadRGBAImage 读取它,获取 TIFFGetR/TIFFGetG/TIFFGetB 给出的 RGB 值,从 255 中减去它们,取这些新值并用它们一个一个地写入每个像素。最后,我想得到原始图像和一个新的“补充”图像,就像原始图像的底片一样。

有没有办法使用 LibTiff 做到这一点?我浏览了文档并在 Google 周围进行了搜索,但我只看到了非常短的 TIFFWriteScanline 示例,这些示例提供的代码/上下文/注释行太少,以至于我无法弄清楚如何在其中实现它我希望它的工作方式。

我对编程还很陌生,所以如果有人能给我指出一个带有大量解释性注释的完整示例,或者直接帮助我编写代码,我将不胜感激。感谢您花时间阅读本文并帮助我学习。

我目前拥有的:

// Other unrelated code here...

//Invert color values and write to new image file
for (e = height - 1; e != -1; e--)
{
for (c = 0; c < width; c++)
{
red = TIFFGetR(raster[c]);
newRed = 255 - red;
green = TIFFGetG(raster[c]);
newGreen = 255 - green;
blue = TIFFGetB(raster[c]);
newBlue = 255 - blue;
// What to do next? Is this feasible?
}
}

// Other unrelated code here...

Full code如果你需要的话。

最佳答案

我回去查看我的旧代码。原来我没有用libtiff。尽管如此,你走在正确的轨道上。你想要类似的东西;

    lineBuffer = (char *)malloc(width * 3) // 3 bytes per pixel
for all lines
{
ptr = lineBuffer
// modify your line code above so that you make a new line
for all pixels in line
{
*ptr++ = newRed;
*ptr++ = newGreen;
*ptr++ = newBlue
}
// write the line using libtiff scanline write
write a line here
}

记得适本地设置标签。此示例假定 3 字节像素。 TIFF 还允许在每个平面中使用每个像素 1 字节的单独平面。

或者,您也可以将整个图像写入一个新缓冲区,而不是一次写入一行。

关于c++ - 使用 LibTiff 逐像素写入 tif?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33575115/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com