📄 gray.c
字号:
/*############################################################################# * 文件名:gray.c * 功能: 灰度图像操作 * modified by PRTsinghua@hotmail.com#############################################################################*/#include "wm.h"#include "gray.h"// 申请8×8的灰度图像块gray **alloc_grays_8x8() { return alloc_grays(8, 8);}// 申请cols×rows大小的内存块gray **alloc_grays(int cols, int rows) { gray **p; int i; p = (gray **)malloc(rows * sizeof(gray *)); if (!p) {#ifdef DEBUG fprintf(stderr, "alloc_grays(): malloc() failed\n"); exit(1);#else return NULL;#endif } p[0] = (gray *)malloc(rows * cols * sizeof(gray)); if (!p[0]) {#ifdef DEBUG fprintf(stderr, "alloc_grays(): malloc() failed\n"); exit(1);#else free(p); return NULL;#endif } for (i = 1; i < rows; i++) { p[i] = &(p[0][i * cols]); } return p;}// 释放内存块void free_grays(gray **grays) { free(grays[0]); free(grays);}// 拷贝灰度图像到另外的块void copy_grays_to_block(gray ** block_grays, gray ** image_grays, int c, int r, int w, int h) { int i, j;#ifdef DEBUG if (!image_grays) { fprintf(stderr, "copy_grays_to_block(): NULL image pixels\n"); } if (!block_grays) { fprintf(stderr, "copy_grays_to_block(): NULL block pixels\n"); } if (w <= 0 || h <= 0 || c < 0 || r < 0) { fprintf(stderr, "copy_grays_to_block(): block dimension out of range\n"); }#endif for (i = 0; i < w; i++) { for (j = 0; j < h; j++) block_grays[j][i] = image_grays[r + j][c + i]; }}// 从块中往灰度图像拷贝数据void copy_grays_from_block(gray ** image_grays, gray ** block_grays, intc, int r, int w, int h) { int i, j;#ifdef DEBUG if (!image_grays) { fprintf(stderr, "copy_grays_from_block(): NULL image pixels\n"); } if (!block_grays) { fprintf(stderr, "copy_grays_from_block(): NULL block pixels\n"); } if (w <= 0 || h <= 0 || c < 0 || r < 0) { fprintf(stderr, "copy_grays_from_block(): block dimension out of range\n"); }#endif for (i = 0; i < w; i++) { for (j = 0; j < h; j++) image_grays[r + j][c + i] = block_grays[j][i]; }}// 打印灰度图像void print_grays(gray **grays, int c, int r, int w, int h) { int i, j; gray *p;#ifdef DEBUG if (!grays) { fprintf(stderr, "print_grays(): NULL pixels\n"); } if (w <= 0 || h <= 0 || c < 0 || r < 0) { fprintf(stderr, "print_grays(): block dimension out of range\n"); }#endif for (j = r; j < r + h; j++) { p = &grays[j][c]; for (i = 0; i < w; i++) fprintf(stderr, "%3d ", *(p++)); fprintf(stderr, "\n"); }}// 打印8×8的灰度块void print_grays_8x8(gray **grays) { int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) fprintf(stderr, "%3d ", grays[i][j]); fprintf(stderr, "\n"); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -