结构libraw_data_t是库的用户可访问的数据结构的“包装”。当使用C ++ API时,它可以作为LibRaw :: imgdata(class_instance.imgdata)访问。通过open_file(和其他open_调用)打开文件后,此结构中的数据出现,但图像本身(由unpack()填充)和包含预览信息的数据(通过调用unpack_thumb()填充)除外。数据字段:
unsigned int progress_flags; 该字段记录 图像处理的过去 阶段。 unsigned int process_warnings; 此字段记录图像处理期间出现的 可疑情况(警告)。 libraw_iparams_t idata; 该结构描述了从RAW文件中检索的主要图像参数。 下面详细描述该结构的字段。 libraw_image_sizes_t sizes; 该结构描述了图像的几何参数。 下面详细描述该结构的字段。 libraw_lensinfo_t镜头; 该结构描述了用于镜头的镜头。 下面详细描述该结构的字段。 libraw_makernotes_t makernotes; 该结构包含从文件中提取的相机/供应商特定元数据。没有提供说明,对不起,如果您对特定标签/相机/供应商感兴趣 - 请使用Exiftool文档作为参考 libraw_colordata_t颜色; 该结构包含从文件中检索的颜色数据。 下面详细描述该结构的字段。 libraw_imgother_t其他; 用于信息目的的数据结构:它包含从文件中提取但在进一步文件处理中不需要的图像参数。 下面详细描述该结构的字段。 libraw_thumbnail_t缩略图; 包含预览信息和预览数据本身的数据结构。调用open_file()时,将填充此结构的所有字段但缩略图本身。缩略图由unpack_thumb()调用。这些字段在 下面详细描述。 libraw_rawdata_t rawdata; 指向原始数据缓冲区的数据结构。细节描述 如下。 ushort(* image)[4]; 包含图像像素本身的内存区域。调用raw2image()或dcraw_process()时会填充它。 libraw_output_params_t params; 用于管理图像后处理的数据结构(使用dcraw仿真器)。 下面详细描述该结构的字段。 void(LibRaw :: * interpolate_bayer)() 指向用户指定的拜耳插值功能的指针。如果不为null,则调用此函数而不是user_qual指定的标准函数(或未指定) void(LibRaw :: * interpolate_xtrans)() 指向用户指定的X-Trans插值功能的指针。如果不为null,则调用此函数而不是user_qual指定的标准函数(或未指定)小于1000的值保留为特殊情况:
1 - 叶片捕捉灯,16x16拜耳矩阵;9 - 富士X-Trans(6x6矩阵)3..8和10..999 - 未使用。 char xtrans [6] [6]; char xtrans_abs [6] [6]; 这些矩阵包含Fuji X-Trans row / col到颜色映射。第一个相对于可见区域,而第二个相对于传感器边缘定位。 char cdesc [5]; 编号从0到3的颜色描述(RGBG,RGBE,GMCY或GBTG)。 unsigned xmplen; char * xmpdata; XMP打包数据长度和指向提取的XMP数据包的指针。结构libraw_image_sizes_t是描述图像大小的所有文件数据的集合。数据字段:
ushort raw_height,raw_width; RAW图像的全尺寸(包括帧),以像素为单位。 ushort height,width; 图像的可见(“有意义”)部分的大小(没有帧)。 ushort top_margin,left_margin; 框架左上角的坐标(第二个角是根据图像的完整大小和可见部分的大小计算得出的)。 ushort iheight,iwidth; 输出图像的大小(可能与需要图像旋转或具有非方形像素的相机的高度/宽度不同)。 unsigned raw_pitch; 原始数据的完整大小 以字节为单位。 double pixel_aspect; 像素宽高比。如果不是单位,则在输出期间需要沿着一个轴缩放图像。 int flip; 图像方向(如果不需要旋转,则为0;如果需要180度旋转,则为3;如果逆时针旋转90度,则为5,如果顺时针旋转90度,则为6)。结构libraw_colordata_t将所有颜色数据合并在一起,这些颜色数据都是从RAW文件中检索出来的,并根据图像本身进行计算。对于不同的相机,有不同的颜色处理方式。数据字段:
ushort curve[0x10000]; 相机色调曲线。可以按原样读取或计算,具体取决于文件格式; unsigned black; 黑色等级。取决于相机,它可能为零(这意味着在拆包阶段或相机本身已减去黑色),在解包阶段计算,从RAW文件读取或硬编码。 unsigned cblack [4102]; 每通道黑电平校正。前4个值是每通道校正,接下来两个是黑色电平模式块大小,比cblack [4] * cblack [5]校正值。 unsigned data_maximum; 当前文件中的最大像素值。在raw2image或dcraw_process()调用时计算。 unsigned maximum; 最大像素值。根据大多数相机的数据计算,硬编码为其他相机。此值可以在后处理阶段(执行黑色减法时)和自动最大调整时更改(如果 params.adjust_maximum_thr设置为非零,则执行此调整)。 float fmaximum; 浮动数据文件的实际图像中的最大像素值。 float fnorm; 将浮点原始数据转换为整数时使用的归一化系数。 ushort white [8] [8]; 从文件CIFF / CRW中提取的白色像素块。未提取其他格式。用于计算白平衡系数。 float cam_xyz [4] [3]; 相机RGB - XYZ转换矩阵。该矩阵是常数(对于不同的模型是不同的)。对于RGB相机,最后一行为零,对于不同颜色模型(CMYG等),最后一行为非零。 float cam_mul [4]; 白平衡系数(作为镜头)。从文件读取或计算。 float pre_mul [4]; 日光白平衡系数(日光平衡)。从文件读取,或根据文件数据计算,或从硬编码常量中获取。 float cmatrix [3] [4]; 从RAW文件读取的相机颜色数据(如果有) float rgb_cam [3] [4]; 相机到sRGB转换矩阵 float ccm [3] [4]; 从文件元数据中取出相机颜色校正矩阵(如果文件中没有这样的数据,则为统一矩阵) ph1_t phase_one_data; 为Phase One相机读取的颜色数据块。 float flash_used; float canon_ev; 用于白平衡计算的字段(适用于某些P&S佳能相机)。 char model2 [64]; 固件版本(适用于某些相机)。 char UniqueCameraModel [64],LocalizedCameraModel [64]; 来自同名DNG标记的值。 void * profile; 指向检索到的ICC配置文件的指针(如果它存在于RAW文件中)。 unsigned profile_length; ICC配置文件的长度,以字节为单位 unsigned black_stat [8]; 如果从掩蔽区域计算出黑色级别统计数据:4个像素值之和,而不是4个像素计数(每个通道)。 libraw_dng_color_t dng_color [2]; 从DNG读取的颜色数据:两个光源的光源,校准矩阵和颜色矩阵。(详见DNG规格)。 float baseline_exposure; DNG文件:BaselineExposure标记的值。数据字段:
float iso_speed; ISO感光度。 float shutter; 快门速度。 float aperture; 光圈。 float focal_len; 焦距。 time_t timestamp; 拍摄日期。 unsigned shot_order; 图像序列号。 unsigned gpsdata [32]; GPS数据(未解析的块,按原样写入输出)。 libraw_gps_info_t parsed_gps; 解析的GPS数据:经度/纬度/高度和时间戳。 char desc [512]; 图片描述。 char artist[64]; 图像的作者。 float FlashEC; 闪光曝光补偿。结构libraw_rawdata_t:
来自传感器的RAW数据,通过unpack()调用进行readed和unpacked 。在后处理期间修改的“备份”颜色副本和数据。当后处理调用重复时,将从此备份恢复所需的数据。数据字段:
void * raw_alloc; 分配用于保存RAW数据的缓冲区 unsigned short * raw_image; 指向具有单分量(bayer)数据的缓冲区的指针。 unsigned short(* color3_image)[3]; 指向3分量像素阵列的指针。 unsigned short(* color4_image)[4]; 指向具有4分量像素数据数据的缓冲区的指针 float * float_image; 指向FP格式的单组件(bayer)数据缓冲区的指针。 float(* float3_image)[3]; 指向3分量FP像素阵列的指针。 float(* float4_image)[4]; 指向具有4分量像素数据数据的缓冲区的指针在调用unpack()之后,只有其中一个字段为非NULL。
此结构的所有其他字段均供内部使用,不应由用户代码触及。
结构libraw_thumbnail_t描述了与RAW文件中保存的预览相关的所有参数。数据字段:
LibRaw_thumbnail_formats tformat; 缩略图数据格式。枚举 LibRaw_thumbnail_formats中的一个值。 ushort twidth,theight; 预览图像的尺寸(以像素为单位)。 float tlength; 缩略图长度,以字节为单位 int tcolors; 预览中的颜色数。 char * thumb; 指向从数据文件中提取的thumbmail的指针。从Makernotes和EXIF中提取以下参数,以帮助识别相机上安装的镜头。如果Makernotes或EXIF中缺少该值,则参数设置为零,但下面列出了一些例外情况。在某些情况下,CameraFormat和CameraMount等字段的值是根据相机型号和/或相机ID设置的。
包含使用桌子识别尼康相机镜头所需的其他参数 - 请参阅http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/Nikon.html上的 Nikon LensID值。
包含最小焦距,最大焦距,最小焦距下可用的最大光圈,以及最大焦距下可用的最大光圈,从DNG原始文件的EXIF字段中提取。
包含上述所有结构,以及直接从EXIF字段提取的参数:
'MinFocal'和'MaxFocal',如果非零,则包含安装在相机上的镜头的最小和最大焦距。'MaxAp4MinFocal','MaxAp4MaxFocal' - 如果不为零,则包含最小焦距的最大光圈和最大焦距下可用的最大光圈'LensMake',如果不是空的,则包含带有镜头制造商名称的字符串。“镜头”(如果不为空)包含EXIF中记录的镜头名称'FocalLengthIn35mmFormat' - 如果非零,与EXIF标准中的FocalLengthIn35mmFilm相同,标记为0xa405。'EXIF_MaxAp' - 如果非零,则包含从EXIF标记0x9205派生的值。结构libraw_output_params_t用于管理dcraw兼容调用dcraw_process(),dcraw_ppm_tiff_writer()和dcraw_thumb_writer()。此结构的字段对应于dcraw的命令行键。数据字段:
unsigned greybox [4]; dcraw keys: -A xywh 4个数字,对应于用于计算白平衡的矩形的坐标(以像素为单位)。X和Y是左上角矩形的坐标; w和h分别是矩形的宽度和高度。 unsigned cropbox [4]; dcraw keys: none 此字段设置图像裁剪矩形。Cropbox [0]和cropbox [1]是矩形的左上角坐标,其余两个值分别是width和height。在任何图像旋转之前应用所有坐标。 double abe[4]; dcraw keys: -C 校正色差; 唯一指定的值是像素 [0],红色乘数像素 [2],蓝色乘数。对于某些格式,它会影响 RAW数据读取,因为像差校正会改变输出大小。 double gamm [6]; dcraw keys: -g power toe_slope 设置用户伽玛曲线。库用户应该设置gamm数组的前两个字段: gamm [0] - 反向伽马值) gamm [1] - 线性部分的斜率(所谓的脚趾斜率)。对于简单的功率曲线,设置为零。 剩余的4个值将自动填充。默认设置为rec。使用BT.709:功率2.222(即gamm [0] = 1 / 2.222)和斜率4.5。对于sRGB曲线,使用gamm [0] = 1 / 2.4和gamm [1] = 12.92,对于线性曲线设置gamm [0] / gamm [1]为1.0。
float user_mul [4];dcraw keys: -r mul0 mul1 mul2 mul3用户白平衡的 4个乘数(r,g,b,g)。 unsigned shot_select;dcraw keys: -s 选择要处理的图像编号(对于在一个文件中包含多个RAW图像的格式)。 float bright;dcraw keys: -b 亮度(默认1.0)。 float threshold;dcraw keys: -n 通过小波去噪降噪的参数。 int half_size;dcraw键: -h 以50%的大小输出图像。对于某些格式,它会影响 RAW数据读取。 int four_color_rgb;dcraw keys: -f 为两个绿色组件切换单独的插值。 int highlight;dcraw keys: -H 0-9:高亮模式(0 =剪辑,1 =取消剪辑,2 =混合,3 + =重建)。 int use_auto_wb;dcraw keys: -a 使用对整个图像求平均后获得的自动白平衡。 int use_camera_wb;dcraw keys: -w 如果可能,请使用相机的白平衡。 int use_camera_matrix;dcraw keys: + M / -M 0:不使用嵌入的颜色配置文件1(默认):对DNG文件使用嵌入的颜色配置文件(如果存在)(总是); 仅当设置了use_camera_wb时才能用于其他文件;3:无论白平衡设置如何,都使用嵌入的颜色数据(如果存在)。 int output_color;dcraw keys: -o [0-5]输出颜色空间(原始,sRGB,Adobe,Wide,ProPhoto,XYZ)。 char * output_profile;dcraw keys: -o filename 输出配置文件ICC文件的路径(仅在使用LCMS支持编译LibRaw时使用) char * camera_profile; dcraw keys:-p file 输入(相机)配置文件ICC 文件的路径(或嵌入配置文件的“嵌入”)。仅在编译LCMS支持时使用。 char * bad_pixels; dcraw keys:-P文件 带有坏像素映射的文件的路径(以dcraw格式:“列行以像素为单位的死像在UNIX格式中”,每行一个像素)。 char * dark_frame;dcraw keys: -K文件 暗帧文件的路径(16位PGM格式) int output_bps;dcraw keys: -4 8位(默认)/ 16位(键-4)。 int output_tiff;dcraw keys: -T 0/1:输出PPM / TIFF。 int user_flip;dcraw keys: -t [0-7]翻转图像(0 =无,3 = 180,5 = 90CCW,6 = 90CW)。默认值为-1,表示从RAW获取相应的值。 对于某些格式, 会影响RAW数据读取,例如,从柯达相机中解压缩缩略图。 int user_qual;dcraw keys: -q 0-10:插值质量: 0 - 线性插值1 - VNG插值2 - PPG插值3 - AHD插值4 - DCB插值5 - Paul Lee修改的AHD插值6 - AFD插值(5遍)7 - VCD插值8 - 混合VCD /修改AHD插值9 - LMMSE插值10 - AMaZE插值11 - DHT插值12 - 改进的AHD插值(作者Anton Petrusevich)仅当编译了“LibRaw demosaic pack GPL2”时,值5-9才有用(有关详细信息,请参阅发行版中的README.demosaic-packs)。仅当LibRaw使用“LibRaw demosaic pack GPL3”编译时,值10才有用。如果某些插值方法不受支持,因为LibRaw编译时没有相应的demosaic pack,将使用AHD插值并在process_warniong字段中设置LIBRAW_WARN_FALLBACK_TO_AHD。 int user_black;dcraw keys: -k 用户黑电平。 int user_cblack [4];dcraw keys: none 对user_black的每通道更正。 int user_sat;dcraw keys: -S 饱和度调整。 int med_passes;dcraw keys: -m 中值滤波器通过次数。 int no_auto_bright;dcraw keys: -W 不要使用直方图自动增加亮度。 float auto_bright_thr;dcraw keys: none 使用自动亮度增加时被剪裁像素的一部分。对于dcraw兼容性,默认值为0.01(1%)。现代低噪声多像素摄像机的推荐值取决于拍摄风格。0.001-0.00003范围内的值看起来合理。 float adjust_maximum_thr;dcraw keys: none 此参数根据从实际帧数据计算的channel_maximum []数据控制最大值的自动调整。如果计算的最大值大于adjust_maximum_thr * maximum,则将maximum设置为calculated_maximum。 默认值:0.75。如果将此值设置为高于0.99999,则将使用默认值。如果将此值设置为低于0.00001,则不会执行最大调整。 调整最大值不应该损坏任何图片(特别是如果你使用默认值),并且非常有用于纠正通道溢出问题(风景照片上的洋红色云,室内拍摄的绿 - 蓝亮点)。 int use_fuji_rotate;dcraw keys: -j 默认-1(使用),0 - 不要对富士传感器上的摄像机使用旋转。 int green_matching;打开固定绿色通道的不平衡。 dcraw keys: none 默认值:0(不使用),1 - 打开此后处理阶段。green_matching需要额外的内存来存储图像数据。 int dcb_iterationsdcraw keys:无 DCB校正通过次数。默认值为-1(无校正)。仅适用于DCB插值。 int dcb_enhance_fldcraw keys:无非 零:具有增强插值颜色的DCB插值。 int fbdd_noiserddcraw keys: none 在去马赛克之前控制FBDD降噪。 0 - 不使用FBDD降噪1 - 减少FBDD2(及更多) - 完全减少FBDD int eeci_refinedcraw keys:无 nonzero-使用EECI细化VCD插值。 int es_med_passesdcraw keys:无 VCD + AHD去马赛克后边缘敏感中值滤波器的数量。高度不推荐高于1的值。 int ca_correcdcraw keys:无 正值打开色差抑制(默认值:0即关闭)。 float cared,cablue dcraw keys: none 如果其中一个字段为非零,则将使用这些值而不是自动值。可用范围是+ -0.1 .. + - 4.0。 int cfaline; float linenoise;线路噪音(绑扎)减少。 正值会启用此功能(默认值:关闭)。 linenoise - 减少量。有用的范围是0.001到0.02。默认值为0.0即不清洁任何东西。 int cfa_clean; float lclean,cclean;降低脉冲噪声和高斯高频。 cfa_clean:正值打开该功能(默认值:关闭)。 lclean,cclean - (L)uminance和(C)olor的降噪量。可用范围从0.005到0.05,通用值0.01 int cfa_green; float green_thresh;减少绿色通道不良平衡产生的迷宫伪影。 cfa_green:正值会打开该功能(默认值:关闭)。 green_thresh - 允许均衡的通道之间的最大差异。有用范围在0.01和0.1之间。 int exp_correc; float exp_shift,exp_preser;在去马赛克之前进行曝光校正。 exp_correc:正值打开该功能(默认值:关闭)。exp_shift:线性刻度的曝光偏移。可用范围从0.25(2档变暗)到8.0(3档减速机)。默认值:1.0(无曝光转换)。exp_preser:在使图像变亮时保留高光。可用范围从0.0(无保存)到1.0(完全保存)。0.0是默认值。 int wf_debanding; float wf_deband_treshold [4];wf_debanding:1开启条带抑制(慢!),0关闭它。 wf_deband_treshold [] - 每个通道的debanding阈值。 int use_rawspeed;打开使用RawSpeed库进行数据解包(仅当编译了RawSpeed支持时)。 int no_auto_scale;在LibRaw :: dcraw_process()中禁用像素值缩放(调用LibRaw :: scale_colors()) int no_interpolation;在LibRaw :: dcraw_process()中禁用对去马赛克代码的调用 int raw_processing_optionsunpack()阶段用于特定图像格式的处理选项Sigma Quattro解码标志:
LIBRAW_DP2Q_INTERPOLATERG - 打开R / G通道插值LIBRAW_DP2Q_INTERPOLATEAF - 打开Quattro传感器上低灵敏度(AF或过度曝光控制)点的数据插值。Pentax 4-shot选项:
LIBRAW_PROCESSING_PENTAX_PS_ALLFRAMES - 合并Pentax 4镜头文件的所有帧浮点DNG文件:
LIBRAW_PROCESSING_CONVERTFLOAT_TO_INT - 将FP数据转换为16位整数索尼ARW2.3处理选项:(有关详细信息,请参阅http://www.rawdigger.com/howtouse/sony-craw-arw2-posterization-detection)
LIBRAW_PROCESSING_SONYARW2_BASEONLY - 仅解码基本像素,将delta像素保留为零;LIBRAW_PROCESSING_SONYARW2_DELTAONLY - 仅解码基本像素为零的delta像素;LIBRAW_PROCESSING_SONYARW2_DELTAZEROBASE - 解码delta像素,不添加基值;LIBRAW_PROCESSING_SONYARW2_DELTATOVALUE - 显示可能的分色区域;佳能/尼康小RAW(YCC)解码标志(不要同时使用两者):
LIBRAW_PROCESSING_SRAW_NO_RGB - 禁用YCC到RGB转换LIBRAW_PROCESSING_SRAW_NO_INTERPOLATE - 禁用缺失的颜色值插值Foveon处理标志:
LIBRAW_PROCESSING_FORCE_FOVEON_X3F - 即使使用Demosaic Packs GPL2编译,也可以使用X3F工具进行foveon处理 int sony_arw2_posterization_thr如果LIBRAW_PROCESSING_SONYARW2_DELTATOVALUE用于arw2_options,则设置级别以禁止阴影中的分色显示。 float coolscan_nef_gamma;Coolscan NEF解码的Gamma值(无法从文件获取,应通过调用应用程序设置)。 char p4shot_order [5];Pentax 4shot文件的拍摄顺序。默认值为“3102”。该结构描述了RAW格式的解码器名称和数据格式:
const char * decoder_name 解码器功能名称 unsigned decoder_flags 解码器数据格式。有关详细信息,请参阅 LibRaw_decoder_flags列表。结构libraw_processed_image_t是通过调用dcraw_make_mem_image()/ dcraw_make_mem_thumb()生成的,包含内插数据或缩略图的内存图像。数据字段:
LibRaw_image_formats类型 该字段记录数据类型,包含剩余的结构字段。 LIBRAW_IMAGE_BITMAP - 结构包含RGB位图。所有元数据字段(见下文)都有效并描述了图像数据。LIBRAW_IMAGE_JPEG - 结构包含JPEG文件的内存映像。只有type,data_size和data字段有效(且非零); ushort height,width 图像大小(以像素为单位)。仅在type == LIBRAW_IMAGE_BITMAP时有效。 ushort colors,bits 颜色分量(1或3)和颜色深度(以位为单位)(8或16)。仅当type == LIBRAW_IMAGE_BITMAP时,这些字段才有效。 ushort gamma_corrected 位图数据是否经过伽马校正(对于8位数据始终为1,对于16位可能为0或1)。仅在type == LIBRAW_IMAGE_BITMAP时有效。 unsigned int data_size 数据字段的大小(以字节为单位)。对于等于(height * width * colors *(bits / 8))的位图图像。对于JPEG图像 - 精确的JPEG大小(即提取的thnumbnail大小+ JPEG标题+ EXIF标题)。 unsigned char data [] 数据数组本身。应解释为位图类型的RGB三元组和JPEG类型的JPEG文件。LibRaw中的RAW数据输入(读取)通过调用从LibRaw_abstract_datastream抽象类派生的对象的方法实现。完整的方法列表在href =“API-CXX.html#datastream”> C ++ API参考中描述。
有两个现成的数据流对象实现:
LibRaw_file_datastream - 文件输入(提供给LibRaw的文件名)。LibRaw_buffer_datastream - 从内存缓冲区输入。LibRaw用户可以创建从LibRaw_abstract_datastream派生的自己的datastream对象。例如,这样的对象可以实现直接从相机读取RAW数据(通过远程接口)。LibRaw可以通过LibRaw :: open_datastream()接口使用这些对象。
数据流可以通过LibRaw :: open_datastream()调用(在这种情况下应该创建由用户维护的数据流对象)或通过LibRaw :: open_file()和LibRaw :: open_buffer()快捷方式使用。
只有C ++ API用户可以使用面向对象的接口并实现自己的输入接口。对于C API用户,只有内置的libraw_open_file()/ libraw_open_buffer()快捷方式可用。
定义:
class LibRaw_abstract_datastream {... protected:LibRaw_abstract_datastream * substream;}描述:从LibRaw_abstract_datastream派生的Oject总是包含指向辅助数据流(子流)的指针。此子流在需要时在内部初始化(实际上仅用于Sony RAW数据)并用于临时切换输入流到LibRaw内部分配的临时内存缓冲区。
在自己的数据流对象创建指南中更精确地描述了子流使用细节。