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

📄 xc2.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, *to;int power2(int k){	int ret = 1;	while (k--)		ret <<= 1;	return ret;}int main(int argc, char *argv[]){	int i, j, k, nr_pixels, nr_co, co, one; 	FILE *fp, *fpnew;	unsigned pre;	float eps;		if (argc != 4) {		printf("Usage: %s <file_from> <file_to> <bpp>\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);  to    = malloc(nr_pixels);	j     = atoi(argv[3]);	k     = power2(j);	one   = 256 / k;		pre       = 0;	nr_co     = 1;	co        = 0;	pre       = bitmap[0] / one;	to[0] = one * (bitmap[0] / one);	for (i = 1; i < nr_pixels; i++) {		if (pre == (bitmap[i] / one)) {			co++;			if (co == (unsigned char)k) {				co = 0;				nr_co++;			}		} else {			pre = (bitmap[i] / one);			co  = 1;			nr_co++;		}		to[i] = one * (bitmap[i] / one);	}		fpnew = fopen(argv[2], "wb+");		if (!fpnew) {		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(to, nr_pixels, 1, fpnew);		printf("%0.4f\n", (float)(nr_co * j * 2) / nr_pixels / 8);		eps = 0.0f;	for (i = 0; i < nr_pixels; i++)	  eps += (to[i] - bitmap[i]) * (to[i] - bitmap[i]);	eps /= nr_pixels;	printf("eps: %0.4f\n", eps);		fclose(fpnew);	free(hdr);	free(bitmap);	free(to);		return 0;}

⌨️ 快捷键说明

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