首先是头文件里面的内容:
主要采用了一个结构体可以自动获取图片的信息。
#ifndef _MASAIKE_H
#define _MASAIKE_H
#define _MASAIKE_H
typedef unsigned int u32;
typedef unsigned short u16;
typedef unsigned char u8;
#pragma pack(1) /*取消字节对齐*/
typedef unsigned short u16;
typedef unsigned char u8;
#pragma pack(1) /*取消字节对齐*/
typedef struct { /* bmp图片文件头信息封装 */
/* 位图文件头 */
u8 bit_file_type[2]; /* 位图文件类型:'BM'->0x4d42 */
u32 file_size; /* 整个文件大小 */
u16 reserved1; /* 保留 */
u16 reserved2; /* 保留 */
u32 offset; /* 文件头到位图数据之间的偏移量 */
/* 位图文件头 */
u8 bit_file_type[2]; /* 位图文件类型:'BM'->0x4d42 */
u32 file_size; /* 整个文件大小 */
u16 reserved1; /* 保留 */
u16 reserved2; /* 保留 */
u32 offset; /* 文件头到位图数据之间的偏移量 */
/* 位图信息头 */
u32 head_size; /* 位图信息头长度 */
u32 width; /* 位图宽度 */
u32 height; /* 位图高度 */
u16 bit_planes; /* 位图位面数 */
u16 bits_per_pixel; /* 每个像素的位数 */
u32 compression; /* 压缩说明 */
u32 image_size; /* 位图数据大小 */
u32 h_res; /* 水平分辨率 */
u32 v_res; /* 垂直分辨率 */
u32 color_palette; /* 位图使用的颜色索引数 */
u32 vip_color; /* 重要的颜色索引数目 */
u32 head_size; /* 位图信息头长度 */
u32 width; /* 位图宽度 */
u32 height; /* 位图高度 */
u16 bit_planes; /* 位图位面数 */
u16 bits_per_pixel; /* 每个像素的位数 */
u32 compression; /* 压缩说明 */
u32 image_size; /* 位图数据大小 */
u32 h_res; /* 水平分辨率 */
u32 v_res; /* 垂直分辨率 */
u32 color_palette; /* 位图使用的颜色索引数 */
u32 vip_color; /* 重要的颜色索引数目 */
}bmp_head_t;
void FS_MaGetpic(int);
void FS_MaSaiKe(int);
void FS_MaSaiKe(int);
#endif
然后是.c文件里面的内容,主要采用了两个函数一个函数获取图片大小,一个函数用来打马赛克。
#include
#include
#include
#include
#include
#include
#include "masaike.h"
#include "type.h"
#include
#include
#include
#include
#include
#include "masaike.h"
#include "type.h"
static int g_mskWidth,g_mskHeight,g_mskHeadSize;
static short g_mskBite;
/*获取图片的信息*/
void FS_MaGetpic(int fp)
{
bmp_head_t header; /*图片信息结构体*/
read(fp,&header,sizeof(header));/*将图片里面的内容读到结构体中*/
static short g_mskBite;
/*获取图片的信息*/
void FS_MaGetpic(int fp)
{
bmp_head_t header; /*图片信息结构体*/
read(fp,&header,sizeof(header));/*将图片里面的内容读到结构体中*/
printf("with = %d\n", header.width);
printf("height = %d\n", header.height);
printf("bits_per_pixel = %hd\n", header.bits_per_pixel);
printf("headsize = %d\n",header.head_size);
printf("height = %d\n", header.height);
printf("bits_per_pixel = %hd\n", header.bits_per_pixel);
printf("headsize = %d\n",header.head_size);
g_mskWidth = header.width; /*图片宽度*/
g_mskHeight = header.height; /*图片长度*/
g_mskHeadSize = header.head_size; /*图片的头长度*/
g_mskBite = header.bits_per_pixel;/*每个像素的位数*/
}
g_mskHeight = header.height; /*图片长度*/
g_mskHeadSize = header.head_size; /*图片的头长度*/
g_mskBite = header.bits_per_pixel;/*每个像素的位数*/
}
/*打马赛克*/
void FS_MaSaiKe(int fp)
{
int g_mskXoff,g_mskYoff,g_Width,g_Higth;
int i,j,k,g_mskoffset;
char pix[g_mskBite/8];
printf("please set X Y W H:\n");/*输入 x y 宽和高*/
scanf("%d %d %d %d",&g_mskXoff,&g_mskYoff,&g_Width,&g_Higth);
void FS_MaSaiKe(int fp)
{
int g_mskXoff,g_mskYoff,g_Width,g_Higth;
int i,j,k,g_mskoffset;
char pix[g_mskBite/8];
printf("please set X Y W H:\n");/*输入 x y 宽和高*/
scanf("%d %d %d %d",&g_mskXoff,&g_mskYoff,&g_Width,&g_Higth);
g_mskXoff = g_mskHeight - g_mskXoff;
g_mskYoff = g_mskWidth - g_mskYoff;
printf("%d %d\n",g_mskXoff,g_mskYoff);
for(i=g_mskXoff;i>g_mskXoff-g_Higth;i--) /*打码*/
{
for(j=g_mskYoff;j>g_mskYoff-g_Width;j--)
{
g_mskoffset = g_mskHeadSize+(i*g_mskWidth-j)*(g_mskBite/8);
lseek(fp,g_mskoffset,SEEK_SET);
for(k=0;k
{
pix[j] = pix[j+k];// random();
write(fp,&pix[j],1);
}
}
}
sleep(1);
printf("*---------------------------------------*\n*\n");
printf("*正在玩命打码.........\n*\n");
printf("*---------------------------------------*\n");
sleep(3);
printf("打码成功\n");
}
g_mskYoff = g_mskWidth - g_mskYoff;
printf("%d %d\n",g_mskXoff,g_mskYoff);
for(i=g_mskXoff;i>g_mskXoff-g_Higth;i--) /*打码*/
{
for(j=g_mskYoff;j>g_mskYoff-g_Width;j--)
{
g_mskoffset = g_mskHeadSize+(i*g_mskWidth-j)*(g_mskBite/8);
lseek(fp,g_mskoffset,SEEK_SET);
for(k=0;k
{
pix[j] = pix[j+k];// random();
write(fp,&pix[j],1);
}
}
}
sleep(1);
printf("*---------------------------------------*\n*\n");
printf("*正在玩命打码.........\n*\n");
printf("*---------------------------------------*\n");
sleep(3);
printf("打码成功\n");
}
int main()
{
char *path =(char*)malloc(20);
printf("please input pic name:\n");
gets(path);
int fp = open(path,O_RDWR,0664);
if(fp < 0)
{
perror("open");
exit(EXIT_FAILURE);
}
FS_MaGetpic(fp);
FS_MaSaiKe(fp);
close(fp);:
return FS_OK;
}
原创作品,未经允许不得转载,原创人:多多指教吧。