📄 xc2.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 + -