tif图片的读写

#include<tiffio.h>//图片读取,16为图片和8位图片一样,将buffer改成8位的即可
bool TDatTransform::LoadSliceImage16bit(const char path[], uint16 * buffer, int width, int height)
{TIFFSetWarningHandler(0);TIFF *tif = TIFFOpen(path, "r");if (tif == 0) {printf(" open TIFF file %s failed\n", path);}else{uint32 row;for (row = 0; row <(uint32)height; row++){//需要注意,这里内存偏移必须写为(row-ys)*widthTIFFReadScanline(tif, (buffer + row*width), row);//指针位置,读取长度,三维的话也是这样,加个z方向偏移量即可}TIFFClose(tif);}return true;
}
//写tif图,16位图将其中8位部分数据改成16位即可,三维图片
bool TDatTransform::Write3DBuffer(const char filename[], unsigned char * buffer,size_t nWidth,size_t nHeight,size_t nTotalFrame)
{TIFFSetWarningHandler(0);TIFF* out = TIFFOpen(filename, "w");if (out){//size_t wh = nWidth * nHeight;uint8 *temp = new uint8[nWidth * nHeight];int N_size = 0;size_t nCur = 0;//UChar den = (sizeof(T) == 1) ? 1 : 4;do{TIFFSetField(out, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE);TIFFSetField(out, TIFFTAG_PAGENUMBER, nTotalFrame);TIFFSetField(out, TIFFTAG_IMAGEWIDTH, (uint32)nWidth);TIFFSetField(out, TIFFTAG_IMAGELENGTH, (uint32)nHeight);TIFFSetField(out, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);// 设置一个样本所占内存的大小.TIFFSetField(out, TIFFTAG_BITSPERSAMPLE, 8);TIFFSetField(out, TIFFTAG_SAMPLESPERPIXEL, 1);TIFFSetField(out, TIFFTAG_COMPRESSION, COMPRESSION_LZW);TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);TIFFSetField(out, TIFFTAG_ROWSPERSTRIP, nHeight);unsigned char* curRow = new unsigned char[nWidth];for (uint32 row = 0; row < nHeight; row++){memcpy(curRow, (&buffer[N_size] + row*nWidth), nWidth);    // check the index here, and figure out why not using h*linebytesif (TIFFWriteScanline(out, curRow, row, 0) < 0)break;}delete[]curRow;++nCur;N_size = N_size + nWidth*nHeight;} while (TIFFWriteDirectory(out) && nCur < nTotalFrame);delete[] temp;TIFFClose(out);return true;}else{printf("cant create tiff!\n");return false;}
}
//二维图片的写操作
void TDatTransform::Write8BitImage(const char *path, unsigned char* buffer, uint32 width, uint32 height)
{TIFF *tif = TIFFOpen(path, "w");TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width);TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height);TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); //每个像素点应有几个通道TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); //每个通道的位宽,这里为8位图片TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_LEFTTOP);TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); //设定图片显示时,灰度值越小的像素越接近黑色//  TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, width));TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, 1);TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW);unsigned char* curRow = new unsigned char[width];for (uint32 row = 0; row < height; row++){memcpy(curRow, (buffer + row*width), width);    // check the index here, and figure out why not using h*linebytesif (TIFFWriteScanline(tif, curRow, row, 0) < 0)break;}delete[]curRow;TIFFClose(tif);
}

TIFF库的tif图片读写相关推荐

  1. python 文件夹中的文件批量处理 高通道tif图片转换成jpg格式

    在数据集的制作中,往往涉及到 文件夹中文件的批量处理操作,而首要的任务便是将获得的数据进行重命名以方便批量读取,随后再进行操作. 一.文件批量重命名 文件夹的批量处理操作关键在于用os库的os.lis ...

  2. VUE + tiff.js 加载 tiff,tif 图片

    前段时间公司有个需求,就是前端要加载大量的tif 和 tiff 格式的图片 瞬间觉得头大如牛,没有一点思路,于是一直问度娘,功夫不负苦心人,终于让我找到了一款比较好用的插件 tiff.js // 引入 ...

  3. python读取tif图片时保留其16bit的编码格式

    python读取tif图片时保留其16bit的编码格式 tif图片的编码格式一般是16bit的,在使用python-opencv读取tif文件时,为了保留其编码格式,我们需要用以下的方式: impor ...

  4. 【Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库解码 WebP 图片 )

    文章目录 一.Android 中使用 libwebp.so 库解码 WebP 图片 二.完整代码示例 三.参考资料 一.Android 中使用 libwebp.so 库解码 WebP 图片 libwe ...

  5. 图像处理-STB图片读写

    图片读写 stb 在matlab中利用imread和imwrite来对图片进行读写,在c++中推荐一个很好用的库–stb,这个库只需要一个头文件,就可以对多种类型的图片进行解析和保存,并且使用方便,接 ...

  6. Python各类图像库的图片读写方式总结

    最近在研究深度学习视觉相关的东西,经常需要写python代码搭建深度学习模型.比如写CNN模型相关代码时,我们需要借助python图像库来读取图像并进行一系列的图像处理工作.我最常用的图像库当然是op ...

  7. pytorch之各类图像库的图片读写方式

    主流Python图像库: opencv PIL(pillow) matplotlib.image scipy.misc skimage Table of Contents opencv: cv2.im ...

  8. 【成功实现】python对tif图片的读取与保存

    读取tif图片: import tifffile as tiff import numpy as np img = tiff.imread('a.tif') print(img.shape) 输出形状 ...

  9. Python用img2pdf库批量转换图片为PDF文件

    Python用img2pdf库批量转换图片为PDF文件 import os #导入os库 import time #导入时间库生成时间戳 import img2pdf #导入img2pdf库, 安装命 ...

最新文章

  1. 臻好黄金百香果苗做一个有脑子的程序员
  2. 详解java集合之LinkedList——底层实现是头尾、双向节点,尽情地问我有没有看过集合源码吧!
  3. SSM项目spring配置文件详细步骤(分门别类、灵巧记忆)
  4. 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?
  5. Java性能教程– Java 8流有多快?
  6. sql.xml大于小于号处理的方法
  7. 如果你正处于迷茫期,那就来做这份工作吧!
  8. 虚拟机黑裙加载硬盘_适合练手,在虚拟机中安装黑群晖,想要组建NAS服务器的看这里...
  9. WPS word解决公式上浮的问题
  10. win7怎么关闭配置计算机,Win7电脑怎么设置定时关机?
  11. RK3568 Android12 长按power键功能设置
  12. Arduino基础项目十三:通过开关控制风扇
  13. pubwinol免刷_Pubwin万象OL实名一键自动处理程序
  14. 【python爬虫 系列】1.理解网络爬虫
  15. freemarker导出word、word转pdf,带附件、图片等比缩放
  16. element-ui表格中表头表内容的居中左右对齐
  17. 什么是敏捷开发?敏捷开发流程的8个步骤
  18. 分享一套响应式自适应公司网站官网源码,带文字搭建教程
  19. HyperLPR 开源车牌识别系统搭建踩坑全记录
  20. windows下xshell操作Linux命令大全(及服务器日志查看)

热门文章

  1. ggplot2读书笔记9:第六章 标度(二)
  2. 大乔,王者荣耀真正的王者
  3. 树莓派GPIO针脚在python中BCM与BOARD模式
  4. 华为nova7se乐活版支持鸿蒙,华为nova7se乐活版和nova8se的详细对比参数对比
  5. 解决表格的Drag a column header here to group by that column
  6. VMware配置虚拟机映射,实现局域网络互相访问
  7. 2.Bulldog渗透实战
  8. 笔记本电脑实现内外网双通成功经验分享(内网用有线,外网用无线)
  9. ida 动态调试so库 (连接夜神模拟器)
  10. Git简明入土教程2.4万字-转自廖雪峰Git