生成随机指纹Pixel数据以及处理指纹对角线数据

finger_data.c

#include <time.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h> 
#include <stdbool.h>
#include "finger_data.h"

int main(void)
{
    FILE *ReadDataFp = NULL;
    FILE *WriteDataFp = NULL;
    FILE *SortDataFp = NULL;
    FILE *RandomDataFp = NULL;

    char FilePath[PathNameSize] = "/media/sf_Ubuntushare_16.04/C/MyC/damon/";
    char WriteDataFileName[PathNameSize] = "WriteData.txt";
    char ReadDataFileName[PathNameSize] = "random28-10-25-51.txt";
    char SortDataFileName[PathNameSize] = "Sort.txt";
    char RandomDataFileName[PathNameSize] = "Random.xls";

    int ReadPixelData[PiexlLen] = {};
    int WritePixelData[PiexlLen] = {};
    int RandomPixelData[PiexlLen] = {};
    int len = height > width ? height : width;
    int DiagonalData[len];

    ReadDataFp = OpenCreateFile(ReadDataFp, FilePath, ReadDataFileName, false);
    // WriteDataFp = OpenCreateFile(WriteDataFp, FilePath, WriteDataFileName, true);
    SortDataFp = OpenCreateFile(SortDataFp, FilePath, SortDataFileName, true);
    RandomDataFp = OpenCreateFile(RandomDataFp, FilePath, RandomDataFileName, true);

    //Write Random data to text
    damon_random(RandomPixelData, PiexlLen, 15000, 18200);
    WrtiteReadFile(RandomDataFp, NULL, PiexlLen, RandomPixelData, NULL);
    //Read data from random text
    WrtiteReadFile(NULL, RandomDataFp, PiexlLen, NULL, ReadPixelData);

    GetDiagonalDataFile(RandomDataFp, DiagonalData);
    for (int i = 0; i < len; i++)
        LOG_Damon("%8d ", DiagonalData[i]);

    //Read data from text
    // WrtiteReadFile(NULL, ReadDataFp, PiexlLen, NULL, ReadPixelData);
    //Write data to text
    // WrtiteReadFile(WriteDataFp, NULL, PiexlLen, ReadPixelData, NULL);

    //Sort data from ReadPixelData
    BubbleSort(ReadPixelData, PiexlLen);
    //Write Sortdata to text
    WrtiteReadFile(SortDataFp, NULL, PiexlLen, ReadPixelData, NULL);

    fclose(ReadDataFp);
    // fclose(WriteDataFp);
    fclose(RandomDataFp);
    return 0;

}

FILE *OpenCreateFile(FILE *FilePoint, char FilePath[], char FileName[], bool Create)
{
    struct tm *t;
    time_t tt;
    char timestr[PathNameSize/2];
    time(&tt);
    t = localtime(&tt);

    if (Create) {
        snprintf(timestr, PathNameSize/2, "%d-%d-%d-%d-%s", t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec, FileName);
        snprintf(FilePath, PathNameSize, "%s", timestr);        
    } else {
        snprintf(timestr, PathNameSize/2, "%s", FileName);
        snprintf(FilePath, PathNameSize, "%s", timestr);
    }

    FilePoint = fopen(FilePath, "a+");
    // LOG_Damon("%s File Point = %p", __func__,FilePoint);
    return FilePoint;
}

void WrtiteReadFile(FILE *WriteFilePoint, FILE *ReadFilePoint, int len, int WiteData[], int ReadData[])
{
    int BaseData = 0, DebugCount = 0; 

    if (ReadFilePoint != NULL) {
        fseek(ReadFilePoint,0L,SEEK_SET);
        while (fscanf(ReadFilePoint, "%d", &BaseData) != EOF) {
            ReadData[DebugCount] = BaseData;
            DebugCount++;
        }
    }

    if (WriteFilePoint != NULL) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                fprintf(WriteFilePoint, "%8d ", WiteData[i * width + j]);
            }
            fprintf(WriteFilePoint, "\n");
        }
    }
}

void damon_print(int len, int printdata[])
{

    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            LOG_Damon("%8d ", printdata[i * width + j]);
        }
    }
}

void BubbleSort(int a[], int len)
{
	int i, j, temp;
	for (j = 0; j < len - 1; j++) {
		for (i = 0; i < len - 1 - j; i++) {
            if (a[i] > a[i + 1]) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
	}
}

void damon_random(int Random[], int len, int MinNumber, int MaxNumber)
{
    srand(time(NULL));
    for (int i = 0; i < len; i++) {
        Random[i] = rand() % (MaxNumber - MinNumber + 1) + MinNumber;
    }
}

void GetDiagonalDataFile(FILE *SourceFilePoint, int ReadData[])
{
    int BaseData = 0, DebugCount = 0, StoreData[PiexlLen]; 
    int len = height > width ? height : width;

    if (SourceFilePoint != NULL) {
        fseek(SourceFilePoint,0L,SEEK_SET);
        while (fscanf(SourceFilePoint, "%d", &BaseData) != EOF) {
            StoreData[DebugCount] = BaseData;
            DebugCount++;
        }
    }

    DebugCount = 0;
    if (width > height) {
        for (int i = 0, j = 0; i < height && j < width; ) {
            ReadData[DebugCount] = StoreData[j + i * width];
            j++;
            i = damon_scale(j);
            DebugCount++;
        }
    } else {
        for (int i = 0, j = 0; i < height && j < width; ) {
            ReadData[DebugCount] = StoreData[j + i * width];
            i++;
            j = damon_scale(i);
            DebugCount++;
        }
    }
}

int damon_scale(int j)
{
    float temp, Molecule, Denominator;

    Molecule = height < width ? height : width;
    Denominator = height > width ? height : width;

    temp = (Molecule/Denominator) * j;
    return (int)(temp + 0.5) > (int)temp ? (int)temp + 1 : (int)temp;
}

finger_data.h

#define PathNameSize    128
#define width   80
#define height  80
#define PiexlLen    width * height
FILE *OpenCreateFile(FILE *FilePoint, char FilePath[], char FileName[], bool Create);
void WrtiteReadFile(FILE *WriteFilePoint, FILE *ReadFilePoint, int len, int WiteData[], int ReadData[]);
void damon_print(int len, int printdata[]);
void BubbleSort(int a[], int len);
void damon_random(int Random[], int len, int MinNumber, int MaxNumber);
int damon_scale(int j);
void GetDiagonalDataFile(FILE *SourceFilePoint, int ReadData[]);

#define LOG_TAG "Damon"
#define LOG_Damon(fmt,arg...)  printf("[%s-In-%s-Func-At-%d] "fmt"\n",LOG_TAG, __func__, __LINE__,##arg)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值