?? floatfield.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 + -