【LibRaw】原始图像解码库介绍(十)——C++ API之数据输出到文件以及将解压缩的数据复制到内存缓冲区

数据输出到文件:模拟dcraw行为

尽管存在大量用于任何格式的文件输出的库,但LibRaw包含模拟dcraw提供的文件输出的调用。这主要是为了更容易验证库工作:结果文件必须是二进制相同的。

int LibRaw :: dcraw_ppm_tiff_writer(const char * outfile)

该函数将后处理结果输出到PPM / PGM或TIFF格式的文件(格式通过imgdata.params.output_tiff设置)。结果与dcraw提供的结果完全相同。

该函数根据错误代码约定返回一个整数:如果任何系统调用返回错误,则为正数;如果LibRaw中存在错误情况,则返回负数(来自LibRaw错误列表)。

int LibRaw :: dcraw_thumb_writer(const char * thumbfile)

将缩略图写入PPM格式的文​​件以获取位图缩略图,并将JPEG格式写入JPEG缩略图,即格式与dcraw提供的结果完全相同。

该函数根据错误代码约定返回一个整数:如果任何系统调用返回错误,则为正数;如果LibRaw中存在错误情况,则返回负数(来自LibRaw错误列表)。

将解压缩的数据复制到内存缓冲区

有几个函数调用将存储解压缩的数据存储到内存缓冲区中(使用dcraw_process()之后):

  • get_mem_image_format - 获得结果位图大小和位深度。
  • copy_mem_image - 将后处理数据复制到具有不同颜色顺序和行间距的某个内存缓冲区中。
  • dcraw_make_mem_image - 将处理后的图像数据存储到分配的缓冲区中;
  • dcraw_make_mem_thumb - 将提取的缩略图存储为缓冲区,作为JPEG文件图像(对于大多数摄像机)或RGB位图。

有关用法说明,请参阅samples / mem_image.c示例。

 

void get_mem_image_format(int * widthp,int * heightp,int * colorsp,int * bpp)const - 返回处理位图大小

此函数返回后处理图像的大小:

  • 图像宽度以* widthp返回;
  • 位图高度以* heightp返回;
  • 图像颜色计数以* colorsp返回;
  • 每像素位(8或16)以* bpp返回;

int LibRaw :: copy_mem_image(void * scan0,int stride,int bgr) - 将后处理的位图数据复制到缓冲区

功能参数:

  • void * scan0 - 指向要将数据复制到的缓冲区的指针。缓冲区应至少为stride * image_height字节;
  • int stride - 以字节为单位的每个其他图像行(行)的步幅。通常是image_width *(bit_per_pixel / 8)* image_colors,但如果您希望将图像行对齐到例如8或16或32字节以使CPU更加满意,则可能更多。
  • int bgr - 像素复制顺序。RGB如果bgr == 0且BGR过度。

该函数根据错误代码约定返回一个整数:如果任何系统调用返回错误,则为正数;如果LibRaw中存在错误情况,则返回负数(来自LibRaw错误列表)。

libraw_processed_image_t * dcraw_make_mem_image(int * errorcode = NULL) - 将解压缩和处理后的图像作为RGB位图存储到内存缓冲区中

此函数分配内存缓冲区并将解压缩的预处理映像存储到此缓冲区中。函数返回填充字段的已分配结构libraw_processed_image_t始终将数据作为RGB位图返回(即类型字段等于LIBRAW_IMAGE_BITMAP)。

应该在dcraw_make_mem_image()之前调用dcraw_process();

如果发生错误,则返回NULL。如果调用者已将非NULL值作为errorcode参数传递,则* errorcode将根据错误代码约定设置为错误代码

注意!分配给返回值的内存不会在析构函数或LibRaw :: recycle调用中被炸毁dcraw_make_mem_image的调用者应通过调用LibRaw :: dcraw_clear_mem()来释放此内存

libraw_processed_image_t * dcraw_make_mem_thumb(int * errorcode = NULL) - 将解压缩的缩略图存储到内存缓冲区中

此函数分配内存缓冲区并在其中存储缩略图数据。函数返回填充字段的已分配结构libraw_processed_image_t对于大多数RAW图像,分配的结构将包含JPEG图像(即类型字段等于LIBRAW_IMAGE_JPEG)。对于某些具有RGB位图缩略图(Kodak SLR)的摄像机,返回的结构包含RGB位图(类型字段等于LIBRAW_IMAGE_JPEG,详见结构说明)。

应该在dcraw_make_mem_thumb()之前调用unpack_thumb();

如果发生错误,则返回NULL。如果调用者已将非NULL值作为errorcode参数传递,则* errorcode将根据с 错误代码约定设置为错误代码

注意!分配给返回值的内存不会在析构函数或LibRaw :: recycle调用中被炸毁dcraw_make_mem_image的调用者应通过调用LibRaw :: dcraw_clear_mem()来释放此内存

void LibRaw :: dcraw_clear_mem(libraw_processed_image_t *)

此函数将释放dcraw_make_mem_imagedcraw_make_mem_thumb分配的内存

这是静态类成员,因此调用语法应该是LibRaw :: dcraw_clear_mem(...)。

此调用直接转换为free()系统函数,但最好使用dcraw_clear_mem,因为LibRaw(DLL)可以使用内存管理器编译,而不是调用应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值