📄 zz.c
字号:
#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"struct bmphdr *hdr;unsigned char *bitmap, *to;char buf[2048];int di[8] = {0, 0, 1, 1, 1, -1, -1, -1};int dj[8] = {1, -1, 0, 1, -1, 0, 1, -1};unsigned char tmp[9];inline int cmp(const void *a, const void *b){ unsigned char *t1, *t2; t1 = (unsigned char *)a; t2 = (unsigned char *)b; if (*t1 < *t2) return -1; else if (*t1 > *t2) return 1; else return 0;}int main(int argc, char *argv[]){ int i, j, k, nr_pixels; FILE *fp, *fpnew; unsigned pj, px; int ii, jj; 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); to = malloc(nr_pixels); for (i = 0; i < hdr->height; i++) for (j = 0; j < hdr->width; j++) { if (i == 0 || i == hdr->height - 1 || j == 0 || j == hdr->width - 1) { to[i * hdr->width + j] = bitmap[i * hdr->width + j]; } else { for (k = 0; k < 8; k++) { ii = i + di[k]; jj = j + dj[k]; tmp[k] = bitmap[ii * hdr->width + jj]; } tmp[8] = bitmap[i * hdr->width + j]; qsort(tmp, 9, 1, cmp); to[i * hdr->width + j] = tmp[4]; } } 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); fclose(fpnew); free(hdr); free(bitmap); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -