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

📄 zf.c

📁 source 为程序源代码文件目录 exe 为可执行文件目录 pics 为所有处理好的图片的目录 需要预先安装MinGW MinGW为Mini Gnu for Windows 里面包含gcc
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"struct bmphdr *hdr;unsigned char *bitmap, new_color[256];int count[256], acum[256], count_new[256];int main(int argc, char *argv[]){	int i, j, k, nr_pixels;  FILE *fp, *fpnew;		if (argc != 3) {		printf("Usage: %s <file_from> <file_to>\n", argv[0]);		exit(1);	}		hdr = get_header(argv[1]);	if (!hdr) exit(1);	fp = fopen(argv[1], "rb");		if (!fp) {		printf("File open error!\n");		exit(1);	}	fseek(fp, hdr->offset, SEEK_SET);	nr_pixels = hdr->width * hdr->height;	bitmap = malloc(nr_pixels);	fread(bitmap, nr_pixels, 1, fp);	fclose(fp);	memset(count, 0, sizeof(count));	for (i = 0; i < nr_pixels; i++) {		j = 0;		count[(j | bitmap[i])]++;	}	memcpy(acum, count, sizeof(acum));		for (i = 1; i < 256; i++)		acum[i] += acum[i-1];	memset(count_new, 0, sizeof(count_new));		for (i = 0; i < 256; i++) {		j = acum[i] * 256 / nr_pixels;		if (j > 255) j = 255;		new_color[i] = *(unsigned char*)(&j);		count_new[j] += count[i];	}		/*	for (i = 0; i < 256; i++) 		printf("%d:\t%d\t%d\n", i, count[i], count_new[i]);		for (i = 0; i < 256; i++)		printf("%d\t-->\t%d\n", i, new_color[i]);	*/		for (i = 0; i < nr_pixels; i++)		bitmap[i] = new_color[bitmap[i]];			fpnew = fopen(argv[2], "wb+");		if (fpnew < 0) {		printf("File create error!\n");		exit(1);	}	fwrite(hdr->signature, 2, 1, fpnew);	fwrite(&hdr->size, 4, 1, fpnew);	fwrite(hdr->reserved, 4, 1, fpnew);	fwrite(&hdr->offset, 4, 1, fpnew);	fwrite(&hdr->hdr_size, 4, 1, fpnew);	fwrite(&hdr->width, 4, 1, fpnew);	fwrite(&hdr->height, 4, 1, fpnew);	fwrite(&hdr->nr_planes, 2, 1, fpnew);	fwrite(&hdr->bits_per_pixel, 2, 1, fpnew);	fwrite(&hdr->compress_type, 4, 1, fpnew);	fwrite(&hdr->data_size, 4, 1, fpnew);	fwrite(&hdr->resol_hori, 4, 1, fpnew);	fwrite(&hdr->resol_vert, 4, 1, fpnew);	fwrite(&hdr->nr_colors, 4, 1, fpnew);	fwrite(&hdr->important_color, 4, 1, fpnew);  if (hdr->offset > 54)	  fwrite(hdr->info, (hdr->offset - 54), 1, fpnew);	fwrite(bitmap, nr_pixels, 1, fpnew);		fclose(fpnew);  	free(hdr);	free(bitmap);	return 0;}

⌨️ 快捷键说明

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