#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
FILE *fp = NULL;
char cMask[400] = { 0 };
int iWidth = 0, iHeight = 0;
unsigned char *ucMaskData = NULL;
unsigned char *ucNewMaskData = NULL;
unsigned char *ucReMaskData = NULL;
unsigned char ucTemp[8] = { 0 };
int iCnt = 0;
int iTemp = 0;
int iInd = 0;
int n = 0;
if (argc != 4)
{
printf("please input mask\n");
getchar();
}
else
{
strcpy(cMask, argv[1]);
iWidth = (int)atoi(argv[2]);
iHeight = (int)atoi(argv[3]);
}
if ((fp = fopen(cMask, "rb")) == NULL)
{
printf("输入mask文件无效\n");
exit(0);
}
if ((ucMaskData = (unsigned char *)calloc(iWidth*iHeight, sizeof(char))) == NULL)
{
printf("申请内存空间失败\n");
exit(0);
}
if ((ucNewMaskData = (unsigned char *)calloc(iWidth*iHeight / 8, sizeof(char))) == NULL)
{
printf("申请内存空间失败\n");
exit(0);
}
memset(ucMaskData, 0, iWidth*iHeight);
fread(ucMaskData, iWidth*iHeight, 1, fp);
fclose(fp);
fp = NULL;
for (int i = 0; i < iWidth*iHeight; i++)
{
ucMaskData[i] = ucMaskData[i] / 255;
}
for (int i = 0; i < iWidth*iHeight; i += 8)
{
ucNewMaskData[iCnt++] = ucMaskData[i] * 1 + ucMaskData[i + 1] * 2 + ucMaskData[i + 2] * 4 + ucMaskData[i + 3] * 8 \
+ ucMaskData[i + 4] * 16 + ucMaskData[i + 5] * 32 + ucMaskData[i + 6] * 64 + ucMaskData[i + 7] * 128;
}
if ((fp = fopen("newmask.raw", "wb")) == NULL)
{
printf("输入mask文件无效\n");
exit(0);
}
fwrite(ucNewMaskData, iWidth*iHeight / 8, 1, fp);
fclose(fp);
fp = NULL;
if ((ucReMaskData = (unsigned char *)calloc(iWidth*iHeight, sizeof(char))) == NULL)
{
printf("申请内存空间失败\n");
exit(0);
}
memset(ucReMaskData, 0, iWidth*iHeight);
iCnt = 0;
for (int i = 0; i < iWidth*iHeight; i = i + 8)
{
n = 0;
iTemp = ucNewMaskData[iCnt++];
iInd = i;
while (iTemp > 0)
{
ucTemp[n++] = iTemp % 2;
iTemp = iTemp / 2;
}
if (ucNewMaskData[iCnt - 1] != 0)
{
for (int j = 0; j < 8; j++)
{
ucReMaskData[iInd++] = ucTemp[j];
ucTemp[j] = 0;
}
}
else
{
ucReMaskData[iInd++] = 0;
}
}
for (int i = 0; i < iWidth*iHeight; i++)
{
ucReMaskData[i] = ucReMaskData[i] * 255;
}
if ((fp = fopen("remask.raw", "wb")) == NULL)
{
printf("输入mask文件无效\n");
exit(0);
}
fwrite(ucReMaskData, iWidth*iHeight, 1, fp);
fclose(fp);
fp = NULL;
free(ucReMaskData);
ucReMaskData = NULL;
free(ucMaskData);
ucMaskData = NULL;
free(ucNewMaskData);
ucNewMaskData = NULL;
return 0;
}