如何使用 boost.gil 解析 tiff 图片并返回像素

<2022-06-11 周六>

如何使用boost.gil解析tiff图片并返回像素

这是我的测试代码,能工作,我觉得比较有用,代码片断贴在这里:

#include <boost/gil.hpp>
#include <boost/gil/extension/io/tiff.hpp>
#include <boost/gil/extension/numeric/sampler.hpp>
#include <boost/gil/extension/numeric/resample.hpp>

const int PIXELCNT = 4;

if (lpArgs[3] == 3) {
  namespace bg = boost::gil;
  bg::rgba8_image_t img;
  bg::read_image(lpimgPath, img, bg::tiff_tag{});
  bg::rgba8_image_t out(*pDestW, *pDestH);
  bg::resize_view(bg::const_view(img), bg::view(out),
    bg::bilinear_sampler{});

  size_t size = *pDestW * *pDestH * PIXELCNT;
  unsigned char* ret = new unsigned char[size];
  int i = 0;
  for (int y = 1; y < *pDestH; ++y) {
    bg::rgba8_view_t::x_iterator it = out._view.row_begin(y);
    for (int x = 0; x < *pDestW; ++x, ++i, ++it) {
      ret[PIXELCNT * i + 0] = *((unsigned char*)it + 3);
      ret[PIXELCNT * i + 1] = *((unsigned char*)it + 2);
      ret[PIXELCNT * i + 2] = *((unsigned char*)it + 1);
      ret[PIXELCNT * i + 3] = *((unsigned char*)it + 0);
    }
  }
  return ret;
}

另外,在debian虚拟机上我用的是预装的boost-1.67,版本有点低,原以为低版本boost.gil不应该更稳定嘛,况且还是debian精挑细选的稳定版本,其实这个版本的boost.gil根本是不能用的,因为它没有boost/gil/extension/numeric/sampler.hpp等相关头文件,可以看boost-1.67的文档,会提示你去下载缺失的扩展部分,但是好像是adobe网站吧,已经不提供这些扩展部分的下载了,这是我遇到的第一个坑。

而且即使你下载了这些扩展部分,由于boost.gil的更新较大,代码不能通用,所以我最后选择了最新的boost-1.79版本,因为boost.gil只需要头文件,不需要链接库,所以只要debian的编译器支持即可。

  • 26
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值