⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floatfield.c

📁 显示了如何从细化后的指纹图像中获得细节点集合。代码由C写成。详细情况见解包后的说明
💻 C
字号:
/*############################################################################# * 文件名:floatfield.c * 功能:  实现了指纹浮点域的操作 * modified by  PRTsinghua@hotmail.com#############################################################################*/#include <stdlib.h>#include <stdio.h>#include <string.h>#include "floatfield.h"/* 指纹浮点域结构 */typedef struct iFvsFloatField_t{	FvsFloat_t		*pimg;		/* 浮点数指针数组 */	FvsInt_t		w;			/* 宽度 */	FvsInt_t		h;			/* 高度 */	FvsInt_t		pitch;		/* 倾斜度 */} iFvsFloatField_t;/******************************************************************************  * 功能:创建一个心的浮点域对象  * 参数:无  * 返回:创建失败,返回空;否则返回新的对象句柄******************************************************************************/FvsFloatField_t FloatFieldCreate(){    iFvsFloatField_t* p = NULL;    p = (FvsFloatField_t)malloc(sizeof(iFvsFloatField_t));    if (p!=NULL)    {        p->h        = 0;        p->w        = 0;        p->pitch    = 0;        p->pimg     = NULL;    }    return (FvsFloatField_t)p;}/******************************************************************************  * 功能:破坏已经存在的浮点域对象  * 参数:field   指向浮点域对象的指针  * 返回:无******************************************************************************/void FloatFieldDestroy(FvsFloatField_t field){    iFvsFloatField_t* p = NULL;    if (field==NULL)        return;    p = field;    (void)FloatFieldSetSize(field, 0, 0);    free(p);}/******************************************************************************  * 功能:设置浮点域对象的大小。          内存操作自动完成,如果失败,返回一个错误编号  * 参数:field   指向浮点域对象的指针  *       width   宽  *       height  高  * 返回:错误编号******************************************************************************/FvsError_t FloatFieldSetSize(FvsFloatField_t img, const FvsInt_t width, 						const FvsInt_t height){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    FvsError_t nRet = FvsOK;    FvsInt_t newsize = (FvsInt_t)(width*height*sizeof(FvsFloat_t));    /* 大小为0的情况 */    if (newsize==0)    {        if (field->pimg!=NULL)        {            free(field->pimg);            field->pimg = NULL;            field->w = 0;            field->h = 0;            field->pitch = 0;        }        return FvsOK;    }    if ((FvsInt_t)(field->h*field->w*sizeof(FvsFloat_t)) != newsize)    {        free(field->pimg);        field->w = 0;        field->h = 0;        field->pitch = 0;        /* 申请内存 */        field->pimg = (FvsFloat_t*)malloc((size_t)newsize);    }    if (field->pimg == NULL)        nRet = FvsMemory;    else    {        field->h = height;        field->w = width;        field->pitch = width;    }    return nRet;}/******************************************************************************  * 功能:拷贝一个源图像到目标图像,内存操作和大小重置操作自动完成  * 参数:destination 指向目标浮点域对象的指针  *       source      指向源浮点域对象的指针  * 返回:错误编号******************************************************************************/FvsError_t FloatFieldCopy(FvsFloatField_t destination, 						const FvsFloatField_t source){    iFvsFloatField_t* dest = (iFvsFloatField_t*)destination;    iFvsFloatField_t* src  = (iFvsFloatField_t*)source;    FvsError_t nRet = FvsOK;    nRet = FloatFieldSetSize(dest, src->w, src->h);        if (nRet==FvsOK)        memcpy(dest->pimg, src->pimg, src->h*src->w*sizeof(FvsFloat_t));    return nRet;}/******************************************************************************  * 功能:清空图像,设置浮点域对象指针为空  * 参数:field 指向浮点域对象的指针  * 返回:错误编号******************************************************************************/FvsError_t FloatFieldClear(FvsFloatField_t img){    return FloatFieldFlood(img, 0.0);}/******************************************************************************  * 功能:给浮点域对象的所以数值设置特定值  * 参数:field  指向浮点域对象的指针  *       value  要设置的值  * 返回:错误编号******************************************************************************/FvsError_t FloatFieldFlood(FvsFloatField_t img, const FvsFloat_t value){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    FvsError_t nRet = FvsOK;    FvsInt_t i;    if (field->pimg!=NULL)    {        for (i=0; i<field->h*field->w; i++)            field->pimg[i] = value;    }    return nRet;}/******************************************************************************  * 功能:为浮点域中的特定区域设置特定值  * 参数:field  指向浮点域对象的指针  *       x      X轴坐标  *       y      Y轴坐标  *       val    要设定的值  * 返回:无******************************************************************************/void FloatFieldSetValue(FvsFloatField_t img, const FvsInt_t x, 					const FvsInt_t y, const FvsFloat_t val){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    int address = y * field->w + x;    field->pimg[address] = val;}/******************************************************************************  * 功能:得到特定位置的值  * 参数:field  指向浮点域对象的指针  *       x      X轴坐标  *       y      Y轴坐标  * 返回:浮点值******************************************************************************/FvsFloat_t FloatFieldGetValue(FvsFloatField_t img, const FvsInt_t x, 					const FvsInt_t y){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    /* 数组中的位置 */    int address = y * field->pitch + x;    return field->pimg[address];}/******************************************************************************  * 功能:得到浮点域缓冲区指针  * 参数:field  指向浮点域对象的指针  * 返回:内存缓冲区指针******************************************************************************/FvsFloat_t* FloatFieldGetBuffer(FvsFloatField_t img){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    return field->pimg;}/******************************************************************************  * 功能:获得宽度  * 参数:field  指向浮点域对象的指针  * 返回:宽度******************************************************************************/FvsInt_t FloatFieldGetWidth(const FvsFloatField_t img){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    return field->w;}/******************************************************************************  * 功能:获得高度  * 参数:field  指向浮点域对象的指针  * 返回:高度******************************************************************************/FvsInt_t FloatFieldGetHeight(const FvsFloatField_t img){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    return field->h;}/******************************************************************************  * 功能:获得倾斜程度  * 参数:field  指向浮点域对象的指针  * 返回:倾斜程度******************************************************************************/FvsInt_t FloatFieldGetPitch(const FvsFloatField_t img){    iFvsFloatField_t* field = (iFvsFloatField_t*)img;    return field->pitch;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -